::なぜクイックウォッチウィンドウに "Mscorlib_CollectionDebugView"が追加され、リスト式<T>の要素式に追加されますか?例えば
var p = new {
rg = new List<string> {
"one",
"two",
}
};
クイックウォッチp
、およびツリーのp.rg[0]
をクリックしてください。
式は次のようになります。new System.Collections.Generic.Mscorlib_CollectionDebugView<string>(p.rg).Items[0]
は何このナンセンスである、そしてどのように私はそれを取り除くのですか?
ええ、Listは "this [int]"を実装しているので、 "p.rg [0]"はその要素に対して有効な式です。私は「ほとんどの人が実装を気にしない」と理解していますが、「DebuggerTypeProxy」などの内部デバッガ実装については、誰が気になりますか?木の内部のメンバーを隠す長さに行くなら、余分に行くことはできませんし、表現のコンボでプロキシを隠すことはできませんか? –
Spongman
@ Spongman、理論上はデバッガが "this []"を使用できることは間違いありません。問題は "this []"はC#の構文的な砂糖です。実際にはリストのメンバーであるコンパイラー生成インデクサーにマップされます。デバッガは言語にとらわれないように設計されているので、 "this []"を使用するのはちょっとしたハックです。不快な表現を隠すという点で、これらの生成された表現のいくつかを見るのは醜いことに同意します。しかし、私は開発者として、式を受け取り、再度評価する前にそれを修正するオプションが好きです。 –
ここで、use-caseはDebuggerTypeProxiesを見るのに便利ですか?私が考えることができる唯一のものは、それらのプロキシまたはデバッガ自体を開発している場合です。それ以外の99.99%の時間はノイズです。私は、既存のデザインがそれらを隠すことを難しくしていることを理解しますが、私はそれが本当に正当だとは思わない。 – Spongman