Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 赋值前是否值得检查值?_C#_.net - Fatal编程技术网

C# 赋值前是否值得检查值?

C# 赋值前是否值得检查值?,c#,.net,C#,.net,我通常会这样使用: if(!variable.Equals(value)) { variable = value; } 我学会了这样做,但我只是想知道这是否值得。比较和分配的成本是多少?我想不是,但C#是否在某种程度上优化了将相同数据分配给变量的操作 感谢比较操作对CPU来说更难,而且比赋值操作花费的时间稍多 仅赋值将比仅比较快,但如果变量不等于值,您将执行两个操作-比较和赋值-更多时间 因此,即使变量等于值,不进行比较的赋值也会执行得更快: variable = value; 只有

我通常会这样使用:

if(!variable.Equals(value))
{
    variable = value;
}
我学会了这样做,但我只是想知道这是否值得。比较和分配的成本是多少?我想不是,但C#是否在某种程度上优化了将相同数据分配给变量的操作


感谢

比较操作对CPU来说更难,而且比赋值操作花费的时间稍多

仅赋值将比仅比较快,但如果
变量
不等于
,您将执行两个操作-比较和赋值-更多时间

因此,即使
变量
等于
,不进行比较的赋值也会执行得更快:

variable = value;

只有当
variable
的值为早
value
并且您希望拥有超快速和优化的代码时,它才有价值。但在我看来,利润是有限的
不明显的。您应该使用
variable=value并且它将工作良好,代码将更加清晰

赋值操作本身非常便宜(快速)。取消对变量的引用可能会很昂贵。例如,
product[a.f()+3].age=2
将进行大量计算,以达到所需的
年龄的位置。在您的情况下,在
if
条件中执行相同的解引用。因此,在分配之前进行测试根本没有优势。比较法“减法和检查零标志”),并涉及从内存中读取变量的值。赋值意味着将值写入内存。在记忆中读和写是等价的。据我所知,编译器不使用这种优化技巧。

我猜赋值是faster@KaeL很明显,对于属性,由于INotifyPropertyChanged的实现非常常见,您不想触发不必要的事件,所以这个问题略有不同