.NET 4.7 会在赋值前检查 属性 值吗?

Does .NET 4.7 check property values before assignment?

我刚开始使用 Resharper,我收到 "Redundant check before assignment" 警告,我想知道运行时是否真的检查相等性并跳过重新分配值。我看过其他关于不可变值、原始值或复杂值的帖子,以及检查相等性所涉及的成本与重新分配相等值的成本,这不是我关心的问题。

我担心的是 属性 上的 setter 在第二个 属性 上调用 setter 并且第二个 setter 的成本很高,因为例如,网络呼叫。如果运行时在赋值之前实际上没有检查相等性,我需要自己做,以防止 运行 中不必要的第二个 setter。如果它确实检查相等性而不是重新分配,我宁愿不做冗余检查以提高性能和可读性。

那么,.NET 4.7 会在赋值前检查 属性 值吗?

刚刚检查了下面的代码,它在赋值之前不检查是否相等:

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