以ItemNo构造类,进行举例运行。
GetValue获取值,有两个重载,一般使用的是两个参数的,第二个参数是如果选中的Model的属性是列表索引化的话,可以放索引值,不是索引化属性,则放null
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ceshitype { class Program { static void Main(string[] args) { string[] colEName = { "ID", "Name", "Gender", "Age" }; var itemNo = new ItemNo() { ID = 1, Name = "one", Gender = "man", Age = 18 }; for (int i = 0; i < colEName.Length; i++) { object obj = null; string value = ""; Type itemNoType = itemNo.GetType();//获取model类型,Type是个类,里面涉及到的东西很多 obj = itemNoType.GetProperty(colEName[i]).GetValue(itemNo, null);//GetProperty获取属性,还有一个是GetProperties获取所有属性 value = Convert.ToString(obj);//将obj Console.WriteLine("ItemNo下:{0}的值为:{1},类型为{2}", colEName[i], value, itemNoType.GetProperty(colEName[i]).PropertyType); } Console.ReadKey(); } } public class ItemNo { public int ID { get; set; } public string Name { get; set; } public string Gender { get; set; } public int Age { get; set; } } }
https://msdn.microsoft.com/library/b05d59ty.aspx
官方例子中有给出索引属性的方式
using System; using System.Reflection; class Example { public static void Main() { string test = "abcdefghijklmnopqrstuvwxyz"; // Get a PropertyInfo object representing the Chars property. PropertyInfo pinfo = typeof(string).GetProperty("Chars"); // Show the first, seventh, and last letters ShowIndividualCharacters(pinfo, test, 0, 6, test.Length - 1); // Show the complete string. Console.Write("The entire string: "); for (int x = 0; x < test.Length; x++) { Console.Write(pinfo.GetValue(test, new Object[] {x})); } Console.WriteLine(); } static void ShowIndividualCharacters(PropertyInfo pinfo, object value, params int[] indexes) { foreach (var index in indexes) Console.WriteLine("Character in position {0,2}: '{1}'", index, pinfo.GetValue(value, new object[] { index })); Console.WriteLine(); } }
参照着尝试了一下,如果在itemno类中增加个string TEST进行测试的话,会报参数计数不准确
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ceshitype { class Program { static void Main(string[] args) { string[] colEName = { "ID", "Name", "Gender", "Age", "Test" }; var itemNo = new ItemNo() { ID = 1, Name = "one", Gender = "man", Age = 18, Test = "Test" }; int x = 0; for (int i = 0; i < colEName.Length; i++) { object obj = null; string value = ""; Type itemNoType = itemNo.GetType(); if (i==4) { for (int j = 0; j < "Test".Length; j++) { obj = itemNoType.GetProperty(colEName[i]).GetValue(itemNo, new object[] { j }); } } else { obj = itemNoType.GetProperty(colEName[i]).GetValue(itemNo, null); } value = Convert.ToString(obj); Console.WriteLine("ItemNo下:{0}的值为:{1},类型为{2}", colEName[i], value, itemNoType.GetProperty(colEName[i]).PropertyType); } Console.ReadKey(); } } public class ItemNo { public int ID { get; set; } public string Name { get; set; } public string Gender { get; set; } public int Age { get; set; } public string Test { get; set; } } }
下面这种和官方例子差不多的写法,倒是正常运行
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ceshitype { class Program { static void Main(string[] args) { string[] colEName = { "ID", "Name", "Gender", "Age" }; var itemNo = new ItemNo() { ID = 1, Name = "one", Gender = "man", Age = 18 }; for (int i = 0; i < colEName.Length; i++) { object obj = null; string value = ""; Type itemNoType = itemNo.GetType(); obj = itemNoType.GetProperty(colEName[i]).GetValue(itemNo, null); value = Convert.ToString(obj); Console.WriteLine("ItemNo下:{0}的值为:{1},类型为{2}", colEName[i], value, itemNoType.GetProperty(colEName[i]).PropertyType); } Console.WriteLine("************************"); string x = "Test"; Type type = x.GetType(); for (int i = 0; i < x.Length; i++) { Console.WriteLine( type.GetProperty("Chars").GetValue(x, new object[] {i })); } Console.ReadKey(); } } public class ItemNo { public int ID { get; set; } public string Name { get; set; } public string Gender { get; set; } public int Age { get; set; } } }
type.GetProperty("").GetValue(models[i], null);
标签类
public class Tag : ModelBase { public Tag() { SortID = 99; } /// <summary> /// 产品标签名 /// </summary> [Required(ErrorMessage = "标签名不能为空")] public string Title { get; set; } /// <summary> /// 该标签是否显示 /// </summary> public bool IsShow { get; set; } /// <summary> /// 排序,初始99 /// </summary> public int SortID { get; set; } public virtual ICollection<ProductTag> ProductTags { get; set; } }
var model=new Tag();
Type type = models[i].GetType();
type.GetProperty("Title").GetValue(model, null);
根据属性名获取相应的值