C# Linq ForEach中Replace操作空值报错,如何提前检查空值?
解决字符串为null时调用Replace报错的问题
嗨,这个场景我太熟悉了!当x.thingname或者x.thingname2为null时,直接调用Replace肯定会触发NullReferenceException,这里有几个简洁又安全的处理方案:
方案1:使用null条件运算符(C# 6+)
这是最简洁的写法,利用?.运算符——只有当左侧对象不为null时才会执行后面的方法,否则直接返回null:
things.ToList().ForEach(x => { x.thingname = x.thingname?.Replace("oldvalue", "newvalue"); x.thingname2 = x.thingname2?.Replace("oldvalue", "newvalue"); });
如果希望null的时候替换成空字符串而不是保留null,可以再加个空合并运算符??:
x.thingname = x.thingname?.Replace("oldvalue", "newvalue") ?? string.Empty;
方案2:显式判空处理
如果你需要更明确的逻辑(比如对空字符串也做特殊处理),可以用string.IsNullOrEmpty或者string.IsNullOrWhiteSpace先判断:
things.ToList().ForEach(x => { if (!string.IsNullOrEmpty(x.thingname)) { x.thingname = x.thingname.Replace("oldvalue", "newvalue"); } // 对thingname2做同样处理 if (!string.IsNullOrEmpty(x.thingname2)) { x.thingname2 = x.thingname2.Replace("oldvalue", "newvalue"); } });
方案3:封装复用方法(推荐)
因为你要处理两个属性的相同逻辑,把替换逻辑抽成一个方法会让代码更整洁,也方便后续维护:
// 先定义一个复用方法 private string SafeReplace(string input, string oldValue, string newValue) { return input?.Replace(oldValue, newValue); // 或者带默认值的版本:return input?.Replace(oldValue, newValue) ?? string.Empty; } // 然后调用 things.ToList().ForEach(x => { x.thingname = SafeReplace(x.thingname, "oldvalue", "newvalue"); x.thingname2 = SafeReplace(x.thingname2, "oldvalue", "newvalue"); });
这样不管属性是否为null,都能安全执行,不会抛出异常啦!
内容的提问来源于stack exchange,提问作者c br
相关产品推荐
相关产品推荐

