.Net での Enumerable.Rangeの正確な実装は何ですか? 好ましい.Net 4?生成された for ループですか? カスタム実装 (IEnumerable、IEnumerator) または?
質問する
2314 次
4 に答える
1
この質問に対する受け入れられた回答は、あなたに答えを与えるはずです:
public static class Enumerable {
public static IEnumerable<int> Range(int start, int count) {
var end = start + count;
for(var current = start; current < end; ++current) {
yield return current;
}
}
}
これは正確なコードではありません。メソッド内で多くのエラー チェックなどが行われ、Range
内部的に他のメソッドが呼び出されるためです。ただし、上記の引用されたコードはRange
ルーチンの「本質」です。
Reflectorでコードを調べると、さらに多くの情報が得られるはずです。
于 2009-10-05T13:57:44.220 に答える
1
Reflector 出力のわずかではあるが重要な違い (および CraigTP の回答とそのコメントに記載されている引数チェックと追加レベルの内部化):
public static IEnumerable<int> Range(int start, int count) {
for(int current = 0; current < count; ++current) {
yield return start + current;
}
}
つまり、別のローカル変数の代わりに、利回りごとに追加の追加を適用します。
于 2010-05-28T14:59:15.057 に答える