public ExpectData GetExpectData <T>(ExpectData <T> data) where T : TimeSerialData { return(ConvertionExtensions.Clone(data) as ExpectData); }
public object ToType(Type conversionType, IFormatProvider provider) { object ret = Activator.CreateInstance(conversionType); Type t = conversionType; Type myt = this.GetType(); MemberInfo[] mis = t.GetMembers(); MemberInfo[] mymis = myt.GetMembers(); Dictionary <string, MemberInfo> mydic = new Dictionary <string, MemberInfo>(); for (int i = 0; i < mymis.Length; i++) { if (mymis[i] is PropertyInfo || mymis[i] is FieldInfo) { if (!mydic.ContainsKey(mymis[i].Name)) { mydic.Add(mymis[i].Name, mymis[i]); } else { Log("错误", "强制转换时成员名重复", mymis[i].Name); } } } //mydic = mymis.ToDictionary(a => a.Name,a=>a); for (int i = 0; i < mis.Length; i++) { MemberInfo mi = mis[i]; if (mi is PropertyInfo || mi is FieldInfo) { if (mi is PropertyInfo) { if (!(mi as PropertyInfo).CanWrite)//只读,跳过 { continue; } } if (mydic.ContainsKey(mis[i].Name)) { MemberInfo mymi = mydic[mis[i].Name]; Type mit = null; if (mi is PropertyInfo) { mit = (mi as PropertyInfo).PropertyType; } if (mi is FieldInfo) { mit = (mi as FieldInfo).FieldType; } if (mit == null) { continue; } object val = (mymi is PropertyInfo) ? (mymi as PropertyInfo).GetValue(this, null) : (mymi as FieldInfo).GetValue(this); if (val == null) { continue; } if (val is IConvertible) { val = ConvertionExtensions.ConvertTo((IConvertible)val, mit); } else { continue; } //Log("自定义类型转换",string.Format("{0}={1}",mymi.Name,val)); if (mi is PropertyInfo) { (mi as PropertyInfo).SetValue(ret, val, null); } else { (mi as FieldInfo).SetValue(ret, val); } } } } return(ret); }