C#访问接口数组中对象的非接口方法

use*_*413 3 c# arrays types interface

我有一个名为iBlocks的接口数组,它包含多个类的对象(都实现了iBlocks接口).我想知道是否可能,或者如何处理我需要调用该数组中某个类的所有对象的接口未涵盖的方法的情况.例如:

iBlocks = new iBlocks[1];
iBlocks[0] = new greenBlock();
iBlocks[1] = new yellowBlock();

foreach (greenBlock in iBlocks)
{
   greenBlock.doStuff()
}
Run Code Online (Sandbox Code Playgroud)

doStuff()是一个未在接口中定义的方法,因为它在yellowBlock类中没有用处.实际的界面非常出色,因为greenBlock和yellowBlock有很多共同的功能.但是,我希望仍然可以访问每个类的特殊方面,而无需为每个对象类型创建完全独立的数组.提前致谢!

Ric*_*der 6

您可以使用该as运算符.

foreach (var block in iBlocks)
{
    var green = block as greenBlock;
    if (green != null)
         green.doStuff()
}
Run Code Online (Sandbox Code Playgroud)

或者在LINQ中

foreach (var green in iBlocks.OfType<greenBlock>())
{
    green.doStuff()
}
Run Code Online (Sandbox Code Playgroud)