将接口类型作为参数传递

Orp*_*hid 3 c# parameters interface

我已经知道您可以将接口作为参数传递给方法.这允许您仅指定方法所需的对象的相关成员.我想要做的是能够将接口类型作为参数传递.

假设我声明了几个接口,它们在一系列对象中不均匀地实现,这些对象都形成一个列表/集合.我可以编写一个辅助方法,它既可以从列表中获取对象,也可以将接口类型作为参数,并检查对象是否实现了接口?以下代码显然是垃圾,但它说明了我想要做的事情:

private bool CheckType(object o, interface intrfce)
{
    try
    {
        object x = (object)(intrfce)o;
        return true;
    }
    catch (InvalidCastException e) 
    {
        return false
    }
}
Run Code Online (Sandbox Code Playgroud)

目前我只是计划为接口设置枚举,并要求所有类公开它们实现的接口的数组/列表.然后我可以只检查的枚举,看看他们有什么界面,是有关(我只对我所创建的接口有兴趣-我不回国后IEnumerableICloneable等),或者我可以写为每个接口的辅助方法.我只是想知道是否有一种更优雅的方式呢?

das*_*ght 5

你可以使用泛型来做到这一点:

private bool CheckType<T>(object o) {
    return o is T;
}
Run Code Online (Sandbox Code Playgroud)

你这样称呼它:

foreach (object o in myList) {
    if (CheckType<MyInterface>(o)) {
        ... // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到它是多么容易,你可以在条件本身中做到这一点.

最后,如果您希望只处理在混合列表中实现特定接口的对象,您可以使用LINQ的OfType方法来执行此操作,如下所示:

foreach (MyInterface o in myList.OfType<MyInterface>()) {
   ...
}
Run Code Online (Sandbox Code Playgroud)