Esto es un gran artículo para la sintaxis necesaria para crear nuevos objetos de una consulta LINQ .
Pero, si las asignaciones para completar los campos del objeto son algo más que simples asignaciones, por ejemplo, analizar cadenas a enteros, y una de ellas falla, no es posible depurar esto. No puede crear un punto de interrupción en ninguna de las asignaciones individuales.
Y si mueve todas las asignaciones a una subrutina y devuelve un nuevo objeto desde allí e intenta establecer un punto de interrupción en esa rutina, puede establecer un punto de interrupción en esa rutina, pero el punto de interrupción nunca se disparará.
Así que en lugar de:
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);
vez que hice esto:
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);
}
Esto me permitió fácilmente depurar y averiguar qué estaba fallando asignación.En este caso, al XElement le faltaba un campo que estaba analizando para establecer en SuggestionItem.
Me encontré con estos problemas con Visual Studio 2017 mientras escribía pruebas de unidad para una nueva rutina de biblioteca.
Gracias, esto es lo suficientemente bueno para mí – Jeff