强制转换为IEnumerable
本文关键字:IEnumerable 转换 | 更新日期: 2023-09-27 18:03:49
我有一段相当长的代码,用于计算列表中有一个属性被设置为某个值的对象的数量。然而,我上面提到的几乎所有内容都是在运行时传入的,这就给我留下了这样的内容:
((List<MyObject>)this.DataSource).Count(d => d.GetType().GetProperty(MyProperty).GetValue(d, null).ToString() == ValueToMatch);
问题是该列表作为一个对象存储在Datasource属性中。为了使用count,目前我必须将这个对象强制转换为MyObject类型的列表。我想能够存储任何类型的IEnumerable在数据源。我知道存储在Datasource中的对象将永远是一个List,但是我很难说服c#相信这个事实。它总是抱怨类型安全。
我是在。net 3.5中,所以向上转换为List
这个怎么样:
((IEnumerable)this.DataSource).Cast<object>().Count(d => d.GetType().GetProperty(MyProperty).GetValue(d, null).ToString() == ValueToMatch);
Enumerable.Cast
是为数不多的可以在非泛型IEnumerable
上工作的扩展方法之一。它返回一个IEnumerable<T>
,之后您可以使用其他扩展方法,如Enumerable.Count
。
((IEnumerable)DataSource).Cast<object>()
不行吗?