一、复制
1、 利用反射实现深层复制
public static T DeepCopy<T>(T obj)
{
//如果是null,也是直接返回,但是null的情况下,判断 is string 会报错,故先提前判断
if (obj == null)
return obj;
//如果是字符串或值类型则直接返回
else if (obj is string || obj.GetType().IsValueType)
return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
// 利用递归实现深层复制,如果没有递归,则复制的类里面如果是类,则依旧会改变原始数值
try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
catch { }
}
return (T)retval;
}
2、
二、For循环
1、for 循环中取相邻的两个,最后一个和第0个一起取(% Length)
string currentWord = words[i];
string nextWord = words[(i + 1) % words.Length]; // 使用取余操作确保循环到第一个单词