C# 访问IEnumerable的属性

C# 访问IEnumerable的属性,c#,reflection,wpf-controls,custom-controls,ienumerable,C#,Reflection,Wpf Controls,Custom Controls,Ienumerable,我有一个组合框的自定义类,该组合框具有以下属性: public IEnumerable<object> ItemsSource { get { return (IEnumerable<object>)GetValue(ItemsSourceProperty); } set { SetValue(ItemsSourceProperty, value); } } public string DisplayMemberPath

我有一个组合框的自定义类,该组合框具有以下属性:

public IEnumerable<object> ItemsSource
{
    get { return (IEnumerable<object>)GetValue(ItemsSourceProperty); }
    set
    {
        SetValue(ItemsSourceProperty, value);
    }
}

public string DisplayMemberPath
{
    get { return (string)GetValue(DisplayMemberPathProperty); }
    set { SetValue(DisplayMemberPathProperty, value); }
}
public IEnumerable ItemsSource
{
get{return(IEnumerable)GetValue(ItemsSourceProperty);}
设置
{
设置值(ItemsSourceProperty,value);
}
}
公共字符串DisplayMemberPath
{
get{return(string)GetValue(DisplayMemberPathProperty);}
set{SetValue(DisplayMemberPathProperty,value);}
}
其中,
ItemsSourceProperty、DisplayMemberPathProperty
是已注册的依赖项属性

现在,如果
ItemSource
有一个自定义对象列表:{id int,name string}。DisplayMemberPath的值为:“名称”或“id”。如何访问对象的“名称”或“id”属性?
`

现在还不完全清楚为什么需要自己进行绑定(WPF为您做了很多这方面的工作),但这可能会奏效:

foreach (object item in ItemsSource)
{
    var property = item.GetType().GetProperty(DisplayMemberPath);
    var value = property.GetValue(item, null);
    // Use the value here
}

请注意,这将非常缓慢,并且只处理单个属性名(而不是完整路径)。还有更复杂的替代方案,性能会更好,但我可能会先使用最简单的方法。

请阅读编辑器提供的帮助,以改进您的文章的格式。现在,还不清楚你所说的“我的对象”是什么意思-你有一个完整的对象序列。。。你真的需要在这里提供更多的上下文。(一个简短但完整的示例将是理想的…)给定:IEnumerable和该对象的属性。e、 如果IEnumerable包含类型为A的对象,且其属性为A、b。同时给定我们要访问的属性的名称,例如“A”。然后我需要一个包含属性“a”的所有值的列表,比如foreach(ItemSource中的item){mylist.Add(item.DisplayMemberPath)},但您在编译时不知道类型,对吗?你真的需要自己去做而不是让WPF帮你解决吗?基本上,我怀疑您需要对每个元素调用
GetType()
,然后
GetProperty
…@JonSkeet:解释够了吗?