Questo è un grande articolo per la sintassi necessaria per creare nuovi oggetti da una query LINQ .
Tuttavia, se le assegnazioni per riempire i campi dell'oggetto sono qualcosa di più di semplici assegnazioni, ad esempio, l'analisi di stringhe in numeri interi e una di esse non riesce, non è possibile eseguire il debug di questo. Non è possibile creare un breakpoint su nessuno dei singoli incarichi.
E se si spostano tutti i compiti in una subroutine e si restituisce un nuovo oggetto da lì e si tenta di impostare un punto di interruzione in tale routine, è possibile impostare un punto di interruzione in tale routine, ma il punto di interruzione non verrà mai attivato.
Così, invece di:
var query2 = from c in doc.Descendants("SuggestionItem")
select new SuggestionItem
{ Phrase = c.Element("Phrase").Value
Blocked = bool.Parse(c.Element("Blocked").Value),
SeenCount = int.Parse(c.Element("SeenCount").Value)
};
O
var query2 = from c in doc.Descendants("SuggestionItem")
select new SuggestionItem(c);
ho invece fatto questo:
List<SuggestionItem> retList = new List<SuggestionItem>();
var query = from c in doc.Descendants("SuggestionItem") select c;
foreach (XElement item in query)
{
SuggestionItem anItem = new SuggestionItem(item);
retList.Add(anItem);
}
Questo mi ha permesso facilmente il debug e capire quale incarico stava venendo a mancare.In questo caso, a XElement mancava un campo che stavo analizzando per impostare nel SuggestionItem.
Mi sono imbattuto in questi trucchi con Visual Studio 2017 durante la scrittura di unit test per una nuova routine di libreria.
fonte
2018-01-31 02:38:08
Grazie, questo è abbastanza buono per me domanda – Jeff