Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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
为什么identity==运算符不是';t在c#中可用?_C#_.net - Fatal编程技术网

为什么identity==运算符不是';t在c#中可用?

为什么identity==运算符不是';t在c#中可用?,c#,.net,C#,.net,我只是想知道,为什么identity===操作符在c#中不可用?有什么原因不可用吗什么是c#中===运算符的等式? 因为我在一个地方看到,identity操作符===比equal操作符快。 因为==运算符暂时更改数据类型 更新:与=运算符之间的差异。 ===基本上不会将两个变量转换为临时数据类型,而==equal暂时转换转换变量的数据类型,因为存在 因为值类型覆盖相等 因为C#,与JavaScript不同,它没有“truthy”和“falsy”值,并且隐式转换定义良好 简言之,它不存在是因为与J

我只是想知道,为什么identity===操作符在c#中不可用?有什么原因不可用吗什么是c#中===运算符的等式? 因为我在一个地方看到,identity操作符===比equal操作符快。 因为==运算符暂时更改数据类型

更新:
=
运算符之间的差异。 ===基本上不会将两个变量转换为临时数据类型,而==equal暂时转换转换变量的数据类型,因为存在

因为值类型覆盖相等

因为C#,与JavaScript不同,它没有“truthy”和“falsy”值,并且隐式转换定义良好


简言之,它不存在是因为与JavaScript不同,C#中不需要它。

这是因为PHP/JavaScript是动态类型语言,而C-Sharp是静态类型语言

例如(在PHP中)

在C#

编辑

更详细地说,许多类型没有隐式转换(即字符串与整数),这会导致编译错误,但对于存在隐式转换(整数与浮点)的情况,可以进行类似类型的比较

float x = 1.0f;
int y = 1;

if (x == y) ... // is true
if (x == y && x.GetType() == y.GetType()) ... // is false

它不存在,因为要么没有人请求它,要么它不够重要,没有足够的时间来实现(或者两者兼而有之)。你希望那个操作符做什么?我不明白为什么这个问题需要被否决……你不需要===因为c#是严格键入的。也就是说,如果不先将两种数据类型的变量转换为普通类型,就不会比较它们。我仍然很困惑,为什么这个问题被否决了。请提供任何理由,解释为什么需要C#格式。我想知道,一个拥有182k的人回答了我,但人们仍然对我失望voting@DotNetDreamer-请解释这两者之间有什么关系?@Oded
ReferenceEquals
与@DotNetDreamer并不等同,因为这是对一个糟糕问题的好答案。@Matthew-当然不是。我并不暗示它会。我还给出了C中不存在
=
的其他原因。“弱类型”!=“动态类型”<在弱类型语言中,不同类型之间的代码>=实际上可能导致各种破坏。例如,在C中,您可能正在将指针与数字进行比较。@您是对的,正在更新。。。
if (5 == '5') ... // compile error, incompatible types
float x = 1.0f;
int y = 1;

if (x == y) ... // is true
if (x == y && x.GetType() == y.GetType()) ... // is false