次のコードがあります
class Program
{
static void Main(string[] args)
{
List<A> aList = new List<A>();
var aObj = new A();
aObj.Go(aList.Cast<IB>());
}
}
class A : IB
{
public void Go(IEnumerable<IB> interfaceList)
{
foreach (IB ibby in interfaceList)
{
Console.WriteLine("Here");
}
}
}
interface IB
{
void Go(IEnumerable<IB> interfaceList);
}
}
私はもともと List を渡そうとしましたが、うまくいきません。SOから多くの支援を受けた後、IEnumerable を渡すことがオブジェクトを .ofType(IB) として取得する唯一の方法であることがわかりました。
残念ながら、私のコードでは、次の行が何千回も実行されます。
aList.Cast<IB>();
それがアルゴリズム的に(ILで)どのように実装されているか、そしてその時間順序が何であるかを誰かが知っているかどうか疑問に思っていました。
つまり、各項目をキャストするだけの foreach ループよりも速いのでしょうか、それともまさにそれを行うのでしょうか?
EDITメイン クラスは、実際のオブジェクトのリストを維持する必要があります。しかし、読者はインターフェースを通してそれらに触れることしか許されていません。