【发布时间】:2014-01-05 17:24:41
【问题描述】:
我想创建一个独立于类型的转换器,用于计算具有泛型类型的集合中的元素。
public class CollectionCountConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((SomeCastingType)value).Count;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException(); // not used for oneway binding
}
}
在这种情况下,value 是任何类型的 Collection。问题是找到正确的铸造类型并铸造对象。我想要的是类似的东西
Type t = value.GetType();
ICollection<t> c = (ICollection<t>) value;
int count = c.Count();
但这不起作用。我也尝试将 Object 用作泛型类型,但随后我得到了 InvalidCastException。有什么优雅的方法吗?
【问题讨论】:
-
这里涉及的实际类型是什么?大多数集合也实现了非泛型
ICollection接口,这让事情变得更简单......你能用它来代替吗? -
你也可以使用
IEnumerable<object>。这是声明Count()的地方。 -
列表的实际类型是 List
并且它正在使用 ICollection 接口转换!抱歉,我是 C# 新手...
标签: c# generics collections casting ivalueconverter