将接口类型作为参数传递

Orphid

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

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

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

目前,我只是在计划为接口设置一个枚举,并要求所有类公开它们实现的接口的数组/列表。然后我可以只检查的枚举,看看接口它们是相关的(我只关心我所创建的界面-我不回国后IEnumerableICloneable等),或者我可以写帮手每个接口的方法。我只是想知道是否有更优雅的方法?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

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

private bool CheckType<T>(object o) {
    return o is T;
}

您这样称呼它:

foreach (object o in myList) {
    if (CheckType<MyInterface>(o)) {
        ... // Do something
    }
}

考虑到这样做很容易,您也可以在条件本身中这样做。

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

foreach (MyInterface o in myList.OfType<MyInterface>()) {
   ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章