【发布时间】:2011-08-31 10:43:53
【问题描述】:
假设我有一堂课:
class SomeObject
{
public string Name{get;set;}
public string SomeProperty {get; set;}
}
我还有一个 SomeObjects 的列表:
List<SomeObject> list1 = new List<SomeObject>();
list1.Add(new SomeObject{ Name="Jhon", SomeProperty="baa bla bla"});
list1.Add(new SomeObject{ Name="Albert", SomeProperty="some description"});
list1.Add(new SomeObject{ Name="Tom", SomeProperty="some text"});
我想创建一个类,我可以通过传递我要填充的列表视图和列表来填充列表视图。因此我的那个类的构造函数是这样的:
class MyListView
{
//Constructor
public MyListView(System.Windows.Controls.ListView listView, object list)
{
Lista = ((IEnumerable)list).Cast<object>().ToList(); // Cast the object list to List<objects>
var properties = Lista[0].GetType().GetProperties();
foreach (var prop in properties)
{
// prop = Name then SomeProperty in this case
// create new column in listView
// etc
}
}
}
唯一的问题是,如果传递一个没有对象的列表,我不知道如何获取 SomeObject 的属性,因为我的构造函数假设列表不为空,因此通过获取第一个对象可以尝试查看属性。
所以我的问题是如何通过查看列表来获取 Name 和 SomeProperty 的属性。我想做类似的事情:
public MyListView(System.Windows.Controls.ListView listView, object list)
{
Lista = ((IEnumerable)list).Cast<object>().ToList(); // Cast the object list to List<objects>
properties = Lista.GetType().GetProperty("some property that refers to list items").GetType().GetProperties();
而不是试图从第一个对象中获取它们。我知道我可以修改构造函数并要求构造列表的对象并从该对象获取属性,但如果我不必传递那个额外的参数会很好。
【问题讨论】:
标签: c# reflection properties