基本上我想知道特定命名空间中的所有类型是否实现了IEnumerable
这样的特定接口。
我知道我能做到:
foreach type ...
if type is IEnumerable
...
但是我不想仅仅为了查询是否实现了一个接口来强制转换类型,因为无论如何都会抛弃转换。
答案 0 :(得分:6)
使用是运算符不是强制转换,它是一个测试,听起来像你想要的。 C#中的类型转换是使用强制转换运算符(名称?)完成的,如下所示:
((IEnumerable)someCollection)
或安全铸造操作员:
someCollection as IEnumerable
答案 1 :(得分:3)
假设我已经正确地读了你,你想要一个实现特定接口或超类型的枚举中的类型列表。也许Enumerable.OfType(this IEnumerable source)有用吗?
var enumerables = myListOfThingsToCheck.OfType<IEnumerable>();
答案 2 :(得分:1)
我认为如果您更愿意使用lambda语法,这也会有用。
var enumerables=Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == "YOUR NAMESPACE HERE").OfType<IEnumerable>();