.NET 4.7在分配之前检查属性值吗?

问题描述 投票:0回答:1

我刚开始使用Resharper并且我正在获得“在分配前进行冗余检查”警告,并且我想知道运行时是否确实检查了相等性并跳过重新分配值。我已经看到了关于不可变或原始或复杂值的其他帖子以及检查相等性和重新分配相等值的成本所涉及的成本,这不是我关注的问题。

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

那么,.NET 4.7在分配之前检查属性值吗?

c# resharper .net-4.7
1个回答
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值 - > 1

Setter Called值 - > 1

© www.soinside.com 2019 - 2024. All rights reserved.