我在下面的课程中设置了“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");
答案 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
的值(即您避风港)没有分配任何东西)