空检查不适用于ForEach

空检查不适用于ForEach

我下课

public class DataCls
{
    public string Message { get; set; }
    public string Priority { get; set; }
    public string Key { get; set; }
}


在下面的代码中,我试图基于“消息”和“优先级”的值生成“密钥”。

如果“消息”和“优先级”为空,则值应为“ NA”。

下面的代码不起作用,并且字符串连接没有发生。怎么了

 List<DataCls> lstData = new List<DataCls>
       {
           new DataCls {Message="M1", Priority=null, Key=null },
           new DataCls {Message=null, Priority="P1", Key=null }
       };

        lstData.ForEach(a => a.Key = a.Message == null ? "NA" : a.Message + ":" + a.Priority == null ? "NA" : a.Priority);

最佳答案

方括号的帮助,最后它永远不会为null,因为它已被添加到静态字符串中,然后进行了比较。

lstData.ForEach(
   a => a.Key = a.Message == null ? "NA" :
        a.Message + ":" + (a.Priority == null ? "NA" : a.Priority));


但是这样更好

lstData.ForEach(
    a => a.Key = a.Message == null ? "NA" : a.Message + ":" + (a.Priority ?? "NA"));


尽管您实际上可能真的打算是这样

lstData.ForEach(a => a.Key = $"{a.Message ?? "NA"}:{a.Priority ?? "NA"}");

关于c# - 空检查不适用于ForEach Linq,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39716533/

10-09 02:52