收集实现特定接口而不进行转换的类型?

时间:2009-05-05 16:39:17

标签: c# .net interface

基本上我想知道特定命名空间中的所有类型是否实现了IEnumerable这样的特定接口。

我知道我能做到:

foreach type ...
    if type is IEnumerable
        ...

但是我不想仅仅为了查询是否实现了一个接口来强制转换类型,因为无论如何都会抛弃转换。

3 个答案:

答案 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>();