【发布时间】:2019-09-24 03:05:35
【问题描述】:
如果给定一个未知对象,有什么方法可以检查它是否有索引器,以及它是否确实访问了其中的值。
背景是我正在尝试为 WPF 编写一个自定义转换器,它允许按索引将项目从对象中拉出。
public class IndexedMultiConverter : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int index = (int)values[1]; // What index
if (values[0] has indexer)
{
return values[0][index];
}
return null;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
【问题讨论】:
-
object[] values 是您将 WPF 元素绑定到的集合/对象。在转换器中,首先将其转换为您拥有的集合类型。然后访问属性。
-
values 集合对多重绑定中的每个绑定都有一个项目,是的,我知道我可以转换其中一个值(与我为索引所做的相同)。但是有没有办法知道传入的这些对象之一是否有索引器,无论它是实现索引器的列表、数组还是自定义类(并且没有接口)。
-
一定要用
is IEnumerable -
我认为 IEnumerable 不包含索引器访问,(仅枚举)。我认为 IList 包含索引器要求,但我必须处理的一些类没有实现 IList。
-
最简单的方法是让类实现
IList。当类没有索引器时你会怎么做?
标签: c# wpf ivalueconverter indexer