Example #1
0
 public ExpectData GetExpectData <T>(ExpectData <T> data) where T : TimeSerialData
 {
     return(ConvertionExtensions.Clone(data) as ExpectData);
 }
Example #2
0
        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);
        }