Lets sagen, dass ich diesen Code haben:Kann ich beim Debuggen ein Objekt anzeigen, das in LINQ eine Ausnahme verursacht?
IDictionary<int, int> itemPriceDict = loadItemPriceDictionary();
IList<IRow> dbItems = loadItemsFromDatabase();
IList<ItemDTO> itemDTOs = dbItems
.Select(dbItem => new ItemDTO()
{
Id = dbItem.Id,
Label = dbItem.Label,
PriceTag = itemPriceDict[dbItem.Id] // Possible KeyNotFoundException
})
.ToList();
und ich manchmal eine KeyNotFound Ausnahme erhalten, wenn gegebenen Preisschild für die gegebene dbItem nicht existiert.
Nun, wenn in Visual Studio Debuggen und eine Ausnahme ausgelöst wird, können Sie sehen, Stacktrace, Target, die Sie zeigen, welche Codezeile es ausgelöst, aber ist es möglich, um herauszufinden, welches Objekt (dbItem) die Ausnahme verursacht und seine Daten im Debugger anzeigen? Zum Beispiel im Watch-Fenster?
Ich möchte:
- Entweder wissen, welche Schlüssel im Wörterbuch
- Oder noch besser kennen
aber der Schlüssel und auch die dbItem verarbeitet in Select nicht vorlag ohne irgendeinen Code hinzufügen oder ändern zu müssen.
P.S .: Ich weiß, ich kann den Code als Zyklus neu schreiben, aber ich möchte nicht.
Dies würde nicht funktionieren. Sie würden KeyNotFoundException in der Where-Klausel erhalten, da das Wörterbuch nicht null zurückgibt, wenn der Schlüssel nicht vorhanden ist. –
ok versuchen Sie es so: Wo (dbitem => dbitem.itemPriceDict [dbItem.Id] .Any()) – MKasprzyk
Leider würden Sie KeyNotFound Ausnahme auch erhalten. Das geschieht bei dbitem.itemPriceDict [dbItem.Id] vor dem Aufruf von Any(). Du meinst das: Wo (dbItem => itemPriceDict.ContainsKey (dbItem.Id)) Aber ich möchte keinen Code ändern. Ich würde es in der Debugger-Ansicht sehen - Watch window zum Beispiel. –