我刚刚开始使用Resharper并且我正在获得“分配前的冗余检查”警告,我想知道运行时是否确实检查了相等性并跳过重新分配值。我已经看到其他关于不可变或原始或复杂值的帖子以及检查平等与重新分配相等值的成本所涉及的成本,这不是我的关注。
我担心的是,一个属性上的set setter在第二个属性上调用setter,而第二个setter因为网络调用而成本很高。如果运行时在赋值之前没有实际检查相等性,那么我需要自己做以防止不必要的第二个setter运行。如果确实检查了相等性而没有重新分配,我宁愿不进行冗余检查以提高性能和可读性。
那么,.NET 4.7在分配之前检查属性值吗?
答案 0 :(得分:1)
只需检查下面的代码,它就不会在分配之前检查是否相等:
Test t = new Test();
t.MyValue = 1;
t.MyValue = 1;
public class Test
{
public Test()
{
}
private int myValue;
public int MyValue
{
get
{
return myValue;
}
set
{
myValue = value;
Console.WriteLine($"Setter Called value->{myValue}");
}
}
}
输出:
Setter Called value-> 1
Setter Called value-> 1