したがって、内部に配列を持つクラスがあります。現在、クラスの項目を列挙するための私の戦略は、コードforeach (item x in classInstance.InsideArray)
を使用することです。私はむしろforeach (item x in classInstance)
を使い、配列をプライベートにしたいと思います。私の主な関心事は、私は本当に遅いものを避ける必要があるということです。配列は多くヒットします(数百のアイテムがあります)。この配列を列挙することは安価であることが重要です。 1つの考えは、クラスにIEnumerable<item>
を実装させることでしたが、InsideArray.getEnumerator()
は私に非汎用の列挙子を与えます。私はまた、IEnumerable
インターフェイスの実装を試みました。これは働いたが、おそらくボクシングのために非常に遅かった。より速い列挙:配列の列挙を利用する
パフォーマンスヒットなしにクラス自体を列挙できる方法はありますか?
ノーマルコード:
調整、はるかに遅いコード:
//Class
public class Foo : IEnumerable {
//Stuff
private Item[,] InsideArray;
System.Collections.IEnumerator System.Collections.IEnumerable GetEnumerator()
{
return InsideArray.GetEnumerator();
}
}
//Iteration. Shows up all over the place
foreach (Item x in classInstance)
{
//doStuff
}
注:非ジェネリックイテレータの実装を追加することができて、私の遅いソリューションよりも高速ですが、それはまだちょうど直接配列を使用するより悪いです。私は何とかC#に "ちょっと、このオブジェクトを反復するように要求すると、それは配列と同じ速さで繰り返すように言いますが、どういうことかはっきりとは分かりません..."と答える方法があることを期待していましたこれまで。クラスにインデクサを追加する方法について
方法あなたのクラスの内部にInsideArrayが実装されていますか? –
パブリックItem [、] InsideArray {get;プライベートセット;} – Brian
あなたが試みた正確なコードを表示するには遅すぎます。 –