Condición 1: en el siguiente código, en algún momento list2
es nulo, por lo tanto, realizo una comprobación como, list2 == null ? 0 : list2.Wher.....
Condición 1: Algunos de los nombres list1
tampoco están en list2
, para eso quiero establecer Age
= 0
¿Cómo satisfacer ambas condiciones?
class Program
{
static void Main(string[] args)
{
var list1 = new List<List1> { new List1 { Name = "A1" }, new List1 { Name = "A2" } };
//sometime my "list2" is null as well
//var list2 = null;
var list2 = new List<List2> { new List2 { Name = "A1", Age = 10 } };
foreach (var a in list1)
{
var X = list2 == null ? 0 : list2.Where(x => x.Name == a.Name).FirstOrDefault().Age;
}
}
}
public class List1
{
public string Name { get; set; }
}
public class List2
{
public string Name { get; set; }
public int Age { get; set; }
}
3 respuestas
No necesita el bucle foreach
en absoluto.
Puedes resolver así:
var x = list2 == null ? 0 :
list2.Where(x => list1.Any(e => x.Name == e.Name)).FirstOrDefault()?.Age ?? 0;
U otra variante sería:
var x = list2 == null ? 0 :
list2.FirstOrDefault(x => list1.Any(e => x.Name == e.Name))?.Age ?? 0;
Primero, eche un vistazo a Esta documentación . Explica el .DefaultIfEmpty
que usaré.
DefaultIfEmpty
:
Devuelve los elementos de la secuencia especificada o el valor especificado en una colección singleton si la secuencia está vacía.
Lo que puede hacer en su caso para satisfacer ambas condiciones en el siguiente:
var X = list2 == null ? 0 : list2.Where(x => x.Name == a.Name).DefaultIfEmpty(new List2 { Age = 0 }).First().Age;
Prueba esto:
foreach (var a in list1)
{
var X = list2 == null ? 0 : (list2.Where(x => x.Name == a.Name).FirstOrDefault()?.Age ?? 0);
}
Nuevas preguntas
c#
C # (pronunciado "see sharp") es un lenguaje de programación multi-paradigma de alto nivel, estáticamente tipado desarrollado por Microsoft. El código C # generalmente se dirige a la familia de herramientas y tiempos de ejecución .NET de Microsoft, que incluyen .NET Framework, .NET Core y Xamarin, entre otros. Use esta etiqueta para preguntas sobre el código escrito en las especificaciones formales de C # o C #.