如何用LINQ单行代码处理GetUserName返回null时的取值问题?
搞定LINQ里的NullReferenceException问题
嘿,这问题太常见了!你只需要用上C#的null条件运算符(?.)就能一行解决,完全不用写额外的手动映射代码。
直接把你的代码改成这样就行:
var members = data.Select(t => new Members { username = service.GetUserName(t.Id)?.username }).ToList();
为啥这能行?
?.运算符会先帮你检查service.GetUserName(t.Id)的返回值是不是null:
- 如果是null,整个表达式直接返回null,不会去碰后面的
username属性,自然就不会触发错误; - 如果不是null,就正常读取
username的值。
要是你想在返回null的时候给个默认值(比如空字符串),还能结合空合并运算符(??)再优化一步:
var members = data.Select(t => new Members { username = service.GetUserName(t.Id)?.username ?? "" }).ToList();
这样就完美满足你的需求啦!
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

