結果ビューは、次の条件を満たすコレクションに対してのみ機能します。
- 実装
IEnumerable<T>
またはIEnumerable
(VB.Net は に対してのみ機能しIEnumerable<T>
ます)
- 、、またはを実装しない(C# の制限のみ)
IList
IList<T>
ICollection
ICollection<T>
- 属性を持たない
DebuggerTypeProxy
- System.Core.dll が debugee プロセスに読み込まれます
この場合、 と の両方をBitArray
実装します。後者は、結果ビューで使用する資格を失います。IEnumerable
ICollection
これを回避する 1 つの方法は、Cast
拡張メソッドを使用することです。これによりIEnumerable<T>
、結果ビューを使用できる値が生成されます
bitty.Cast<bool>(), results
#2 の理由は、次の要因の組み合わせです。
- 結果ビューは、もともと非常に具体的な問題を解決するために考案されました。C# イテレータ (および拡張 LINQ クエリ) のデバッグ エクスペリエンスが貧弱でした。の内容を表示する良い方法がまったくありませんでした
IEnumerable<T>
。
- 結果ビューは無料ではなく、非常に具体的なリスクがあります。特に、コレクション全体を積極的かつ同期的にメモリにロードします。これにより、データベース クエリに基づくコレクション、非常に大きなコレクションまたは無限のコレクションで問題が発生する可能性があります。
- すべての既知
IList/<T>
のICollection<T>
タイプには、コンテンツを表示できるメソッドが既にあります
したがって、C# チームは、リスクを最小限に抑え、IEnumerable<T>
既に適切に表示されていると感じた型には追加しないことにしました。VB.Net は他の方向を選択し、任意のIEnumerable<T>
.
当然のことながら、2 つのチームが同じデータを見て異なる決定を下す方法を尋ねるかもしれません。それは視点ともちろん時間に帰着します。VB.Net チームは、優れた LINQ デバッグ エクスペリエンスを提供することに非常に熱心でした。VB.Net には豊富なデバッグ + ENC エクスペリエンスを提供してきた長い歴史があるため、この種のリスクに慣れていて、喜んで引き受け、さらにそれをテストするための帯域幅もありました。C# は単純にリスク回避的であり、スケジュールが非常にタイトであり、実用的に反対することを決定しました。
注:IEnumerable
サポートされていないことについて以前に混乱したのは、VB 式エバリュエーターが実際にそうであったためです。C# 式エバリュエーターはIEnumerable
、上記の規則に従ってサポートします。