class Program { static void Main(string[] args) { string prefix = "td_"; TestClass t = new TestClass(); t.Str = "SSSTTTRRR"; t.Str2 = "SSSTTTRRR222"; //t.Num = 55; //t.Time = DateTime.Now; TestClass2 t2 = new TestClass2(); Show(t2); t2 = Evaluation(t2, prefix, t) as TestClass2; Show(t2); System.Console.Read(); } /// <summary> /// 模板赋值 /// </summary> /// <param name="BaseClass">一般就是数据库里的数据类,带前缀的</param> /// <param name="prefix">前缀</param> /// <param name="DataClass">就是提供数据的类</param> public static object Evaluation(object baseObject, string prefix, object data) { Type DataClass = data.GetType(); Type BaseClass = baseObject.GetType(); PropertyInfo[] propertyinfos = DataClass.GetProperties(); PropertyInfo[] propertyinfos2 = BaseClass.GetProperties(); foreach (var p in propertyinfos) { object value = p.GetValue(data, null); string name = p.Name; foreach (var p2 in propertyinfos2) { if (p2.Name == prefix + name) { string ty = p2.PropertyType.Name.ToString(); if (ty == "String") value = value.ToString(); else if (ty == "Int32") value = Convert.ToInt32(value); else if (ty == "Single") value = Convert.ToSingle(value); else if (ty == "Double") value = Convert.ToDouble(value); else if (ty == "DateTime") value = Convert.ToDateTime(value); else if (ty == "Decimal") value = Convert.ToDecimal(value); p2.SetValue(baseObject, value, null); } } } return baseObject; } public static void Show(object o) { Type type = o.GetType(); PropertyInfo[] myproperties = type.GetProperties(); foreach (var p in myproperties) { object value = p.GetValue(o, null); string cla = p.PropertyType.Name.ToString(); Console.WriteLine("Name:" + p.Name + " Value:" + value + " Attributes:" + cla); } Console.WriteLine("----------------------------------"); } } public class TestClass { public TestClass() { Str = "Strss"; Str2 = "Str2ss"; lists.Add(5); lists.Add(8); } public string Str { get; set; } public string Str2 { get; set; } public int? Num { get; set; } public DateTime? Time { get; set; } public List<int> lists = new List<int>(); } public class TestClass2 { public TestClass2() { } public int num; public DateTime dt; public string td_Str { get; set; } public string td_Str2 { get; set; } public int? td_Num { get; set; } public DateTime? td_Time { get; set; } }
string 居然还是string
class Program { static void Main(string[] args) { string prefix = "td_"; TestClass t = new TestClass(); t.Str = "SSSTTTRRR"; t.Str2 = "SSSTTTRRR222"; t.Num = 55; t.Time = DateTime.Now; t.fl = 2.3f; t.d = 23.44d; TestClass2 t2 = new TestClass2(); Show(t2); t2 = Evaluation(t2, prefix, t) as TestClass2; Show(t2); System.Console.Read(); } /// <summary> /// 模板赋值 /// </summary> /// <param name="BaseClass">一般就是数据库里的数据类,带前缀的</param> /// <param name="prefix">前缀</param> /// <param name="DataClass">就是提供数据的类</param> public static object Evaluation(object baseObject, string prefix, object data) { Type DataClass = data.GetType(); Type BaseClass = baseObject.GetType(); PropertyInfo[] propertyinfos = DataClass.GetProperties(); PropertyInfo[] propertyinfos2 = BaseClass.GetProperties(); foreach (var p in propertyinfos) { object value = p.GetValue(data, null); string name = p.Name; if (value == null) break; //默认值时就不进行赋值 foreach (var p2 in propertyinfos2) { if (p2.Name == prefix + name) { string ty = p2.PropertyType.FullName.ToString(); if (ty.Contains("System.String")) value = value.ToString(); else if (ty.Contains("System.Int32")) value = Convert.ToInt32(value); else if (ty.Contains("System.Single")) value = Convert.ToSingle(value); else if (ty.Contains("System.Double")) value = Convert.ToDouble(value); else if (ty.Contains("System.DateTime")) value = Convert.ToDateTime(value); else if (ty.Contains("System.Decimal")) value = Convert.ToDecimal(value); p2.SetValue(baseObject, value, null); } } } return baseObject; } public static void Show(object o) { Type type = o.GetType(); PropertyInfo[] myproperties = type.GetProperties(); foreach (var p in myproperties) { object value = p.GetValue(o, null); string cla = p.PropertyType.Name.ToString(); Console.WriteLine("Name:" + p.Name + " Value:" + value + " Attributes:" + cla); } Console.WriteLine("----------------------------------"); } } public class TestClass { public TestClass() { Str = "Strss"; Str2 = "Str2ss"; lists.Add(5); lists.Add(8); } public string Str { get; set; } public string Str2 { get; set; } public int? Num { get; set; } public float? fl { get; set; } public double? d { get; set; } public DateTime? Time { get; set; } public List<int> lists = new List<int>(); } public class TestClass2 { public TestClass2() { } public string td_Str { get; set; } public string td_Str2 { get; set; } public int? td_Num { get; set; } public int? td_fl { get; set; } public int? td_d { get; set; } public DateTime? td_Time { get; set; } }
fl,d有值时都被强制转换成int类型
string ty = p2.PropertyType.FullName.ToString();
td_fl类型为
System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
所以用Contains