重新更新“关键”值并不反映“ForEach”

时间:2016-09-28 06:35:53

标签: c#

我在下面的课程中设置了“Key”值,

public class DataCls
{
    private string _key;

    public string Message { get; set; }
    public string Priority { get; set; }
    public string Key
    {
        get
        {
            return _key = $"{Message}:{Priority}";
        }
        set
        {
            _key = value;
        }
    }
}

现在,当我添加一些“消息”和“优先级”时,“密钥”值会自动出现,

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

现在。我想用“ABC”再次更新“Key”值。

我尝试使用下面的“ForEach”,但更新后的“Key”值(“ABC”)没有反映到“lstData”列表中,我缺少什么?

lstData.ForEach(p => p.Key = "ABC"); 

1 个答案:

答案 0 :(得分:4)

问题出在Key的吸尘器上。

假设您要返回由其他代码分配的Key值,或者返回{Message}:{Priority}的组合。

您当前的代码:

public string Key
{
    get
    {
        return _key = $"{Message}:{Priority}";
    }
}

当您访问Key时,$"{Message}:{Priority}"的字符串已分配给_key,然后又返回。

因此,无论您将Key设置为什么值,始终都会返回$"{Message}:{Priority}"

如果您更改get来执行此操作:

public string Key
{
    get
    {
        return _key ?? $"{Message}:{Priority}";
    }
}

通过此更改,我们使用null-coalescing运算符,如果操作数不为null,则返回左侧操作数(例如_key);否则它返回右手操作数(例如字符串$"{Message}:{Priority}")。

如果Key$"{Message}:{Priority}",您将返回分配给_key字符串null的值(即您避风港)没有分配任何东西)