我想写下面的陈述:
things.ToList().ForEach(x =>
{
x.thingname = x.thingname.Replace("oldvalue", "newvalue");
x.thingname2 = x.thingname2.Replace("oldvalue", "newvalue");
});
此代码工作正常,并且替换成功。但是,如果x.thingname
为空,则代码错误。如何在执行替换之前检查空值?
答案 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");
});