Servy的回答是正確的問題我問。
解決方案是編寫自定義代碼進行調試。這是我寫入的一個擴展方法,作爲ToDictionary()
的插入式替換,它引發了一個更有意義的異常。隨意編輯和改進。
public static Dictionary<K,V> ToDictionaryDbg<T,K,V>(this IEnumerable<T> source, Func<T,K> key, Func<T,V> value)
{
if (source == null) return null;
Dictionary<K, V> result = new Dictionary<K, V>();
foreach (var element in source)
{
K k = default(K);
V v = default(V);
try
{
k = key(element);
v = value(element);
result.Add(k, v);
}
catch (ArgumentException aex)
{
throw new ArgumentException("Could not add element with key " + k + ". See inner exception.", aex);
}
}
return result;
}
你說得對。如果Watch支持lambda表達式,這將是可能並且微不足道的,但是添加一行代碼如myEnumerable.GroupBy(e => e.NumericValue,e => e.NumericValue).Where(grp => grp。 Count()> 1)。選擇(grp => grp.First())'並檢查結果。 –
通常情況下,我只是改變了代碼並繼續前進,但該過程運行了很長一段時間,然後才遇到該情況,因此它讓我考慮是否有更好的方法。如果可以在拋出ArgumentException的時候在調試器中檢查'k',那就可以解決問題。 –
@SimonBelanger你可以讓調試器在lambda上中斷,問題是lambda已經在拋出異常的時候完成執行,所以當出現異常時,通過拉姆達;在庫代碼中只有一個本地存儲結果,因此您需要能夠在ToDictionary的定義中檢查該本地,這是無法完成的。 – Servy