C#:当“List1”名称不在“list2”中时,如何设置“X”的值等于零

时间:2018-01-19 10:39:13

标签: c#

条件1:在下面的代码中某个时间list2为空,因此我做了一个检查, list2 == null ? 0 : list2.Wher.....

条件1:某些list1名称也不在list2中,因为我想设置Age = 0

如何满足这两个条件?

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 个答案:

答案 0 :(得分:2)

试试这个:

foreach (var a in list1)
{
    var X = list2 == null ? 0 : (list2.Where(x => x.Name == a.Name).FirstOrDefault()?.Age ?? 0);
}

答案 1 :(得分:2)

您根本不需要foreach循环。

你可以这样解决:

var x = list2 == null ? 0 : 
     list2.Where(x => list1.Any(e => x.Name == e.Name)).FirstOrDefault()?.Age ?? 0;

或其他变体将是:

var x = list2 == null ? 0 : 
      list2.FirstOrDefault(x => list1.Any(e => x.Name == e.Name))?.Age ?? 0;

答案 2 :(得分:1)

首先,看看This Documentation。它解释了我将使用的.DefaultIfEmpty

DefaultIfEmpty将:

  

如果序列为空,则返回指定序列的元素或单例集合中的指定值。

在您的情况下,您可以做些什么来满足下一个条件:

var X = list2 == null ? 0 : list2.Where(x => x.Name == a.Name).DefaultIfEmpty(new List2 { Age = 0 }).First().Age;