每个C#Linq声明

时间:2018-04-20 12:23:19

标签: c# linq

我想写下面的陈述:

things.ToList().ForEach(x =>
{
    x.thingname = x.thingname.Replace("oldvalue", "newvalue");
    x.thingname2 = x.thingname2.Replace("oldvalue", "newvalue");
});

此代码工作正常,并且替换成功。但是,如果x.thingname为空,则代码错误。如何在执行替换之前检查空值?

3 个答案:

答案 0 :(得分:6)

这不是LINQ - 它只是lambdas

如果要检查某些内容是否为空:检查它是否为空

if  (x.thingname != null) { ... }

可以工作,虽然内联null检查也可以工作:

x.thingname = x.thingname?.Replace("oldvalue", "newvalue");
x.thingname2 = x.thingname2?.Replace("oldvalue", "newvalue");

然而,这里的ToList().ForEach()是不必要且昂贵的。只需使用foreach

foreach (var x in things) {
    x.thingname = x.thingname?.Replace("oldvalue", "newvalue");
    x.thingname2 = x.thingname2?.Replace("oldvalue", "newvalue");
}

答案 1 :(得分:3)

尝试使用?.运算符:

things.ToList().ForEach(x =>
{
    x.thingname = x.thingname?.Replace("oldvalue",      "newvalue");
    x.thingname2 = x.thingname2?.Replace("oldvalue", "newvalue");
});

答案 2 :(得分:1)

您可以尝试这样做,??. and ?[] null-conditional Operators)(它与linq无关,您的代码可以按照建议添加?

 x.thingname =  x.thingname?.Replace("oldvalue",  "newvalue");

你的代码将是这样的

things.ToList().ForEach(x =>
{
    x.thingname = x.thingname?.Replace("oldvalue",      "newvalue");
    x.thingname2 = x.thingname2?.Replace("oldvalue", "newvalue");
});