[英]Using equal operators in C#
在 If 語句中,我應該何時使用 =、== 運算符。 有 === 運算符嗎? 這些運營商有什么區別?
=是賦值,就像在
var i = 5;
不要在 if 語句中使用此運算符。
==用於比較
if(i == 6){...}
C# 中沒有===運算符
(以下有點“評論”,但太長而不能在評論中,並且會與本文中的其他評論一起丟失。)
在 C# 中==
(就像 C# 中的所有運算符一樣)是非多態的。 也就是說,被調用的==
的“版本”總是基於編譯時的靜態類型。
例如:
object a = Guid.NewGuid();
object b = new Guid(""+a);
a == b // false -- uses object.== -- an *identity* compare
另一方面, Equals
虛擬方法是在object
上定義的,因此在所有子類型中都是多態的。
object a = Guid.NewGuid();
object b = new Guid(""+a);
a.Equals(b) // true -- uses Guid.Equals
選擇使用哪個( ==
或Equals
)有時很微妙——但很重要。 大多數集合類型將Equals
用於Contains
等任務(這對於所有通用容器幾乎都是必需的,因為對於任意類型T
沒有T.==
。)
// compile-time error: Operator '==' cannot be applied to operands of type 'T' and 'T'
bool equals<T> (T a, T b) { return a == b; }
// fair-game, because object defines Equals and it's polymorphic to subtypes
bool equals<T> (T a, T b) { return a.Equals(b); }
請參閱何時應該使用 == 以及何時應該使用 Equals? 和准則實現equals和等號(= =) ,等等。就個人而言,我使用==
過Equals
為靜態解析的具體類型,其==
是明確的,我不會(合同或約定)處理子類型——示例是string
和(大多數)結構類型(例如int
、 Guid
)。
快樂編碼。
編輯:沒有 C# ===
操作符(正如人們所說,廢話!)。 如果談論 JavaScript 變體,大概是:
bool trippleEquals (object a, object b) {
return a.GetType() == b.GetType() && a.Equals(b);
}
(它在 JavaScript 中是嚴格相等的——但不是對象標識)。
如果談論對象標識,那么它應該與(object)a == (object)b
相同,后者與object.ReferenceEquals(a,b)
具有相同的語義。
單個 = 用於賦值,例如:
String myString = "Hi There";
雙重相等用於比較
if (5 == 5)
{
do something
}
某些語言中的三等號意味着完全相等。
C# 不使用該運算符。
除了其他答案之外, ReferenceEquals(x,y)
可能是最接近===
東西。
在 if 語句中,您通常使用 == 檢查相等性,= 運算符是賦值運算符,據我所知,c# 中沒有 === 我從未聽說過它,但它確實存在於其他語言中,我認為在 javascript 中它確實。
這太渴望發表評論了,所以我決定添加另一篇文章。
我將 var 變量設置為一個對象列表 this 並對兩個總是失敗的比較邏輯進行比較:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (v1 != v2)
{
// Do something
}
感謝這個線程中的帖子,我改變了邏輯如下,現在它完美地工作:
object Object1;
object Object2;
var v1 = Object1;
var v2 = Object2;
if (!v1.Equals(v2))
{
// Do something
}
一個等號僅用於為變量賦值,賦值也將返回相同的值,因此 i 可以在 if 語句中使用,但不應該(幾乎......)在 if 語句中使用。 雙等號用於測試兩個值是否相等,這是您大部分時間使用的。 我不知道 === 運算符。
/維克多
=
是賦值運算符而
==
是一個比較運算符
示例:
int a=2;
int b=3;
int c=a=b; // a, b, c is equal to 3 as b=3
同時
int a=2;
int b=3;
bool c= a==b // c = false since result of a==b is false
有關額外信息,不等於運算符是!=
。
有關 C# 運算符的更多信息: http : //msdn.microsoft.com/en-us/library/6a71f45d%28v=VS.100%29.aspx
我只在 javascript 中遇到過===
。 這是那里的嚴格相等運算符。 我多次使用它if(obj === undefined){ alert("obj has sublimed");}
這個問題已經得到了回答,但我想在使用之間更深入地了解一些細節。
“=”是賦值運算符。 這用於為變量或對象分配一個(或多個)值。 這方面的一個例子是:
int abc;
abc = 5;
Console.WriteLine("Print: " + abc);
*Console Output* Print: 5
您不能在if
語句中使用單個等號,因為代碼會看到您嘗試為對象分配一個值而不是比較兩個值。
“==”是一個比較運算符。 這是在if
語句中比較值的方式。 一個例子是:
int abc = 5;
int xyz = 10; //Notice the use of a single equal sign to assign the values
if (abc == xyz)
{
Console.WriteLine("The values are equal");
}
else
{
Console.WriteLine("The values are not equal");
}
*Console Output* The values are not equal
“===”在技術上被稱為相同的比較運算符。 正如其他答案所述,C# 不允許進行這種比較。 不會的原因是因為相同的比較運算符正在檢查兩個對象類型是否相等以及它們的值。 本質上,它會檢查是否:
double abc = 5;
int xyz = 5;
if (abc === xyz)
{
Console.WriteLine("The values and variable types are equal");
}
*Console Output* Error
您不能使用“===”運算符的原因是因為 C# 足夠聰明,可以在構建之前知道兩個變量的類型不同,並且if
語句要求您比較相同的變量類型。 如果您想比較int
與double
,則需要將其中一個變量轉換(或解析)為與另一個相同的類型。 轉換后,您將與常規的“==”運算符進行比較。
有許多語言確實允許您與相同的比較運算符進行比較。 JavaScript 是允許它的語言的一個很好的例子。 由於 JavaScript 中有很多變量可以聲明為“var”類型,因此檢查十進制值是否等於整數值是有益的。 但是,C# 會在構建期間甚至在編碼期間(取決於您的 IDE)看到類型被錯誤地比較,並且在到達該代碼段時會拋出錯誤或異常
=
和==
在 C# 編程語言中意味着根本不同的東西。 =
是賦值運算符。 它用於為變量賦值。
變量是計算機內存中的桶,賦值運算符是用於告訴計算機將一些數據放入桶中的符號。
==
是相等運算符,用於確定變量是否等於另一個變量。 ===
是嚴格相等的運算符,它不僅檢查桶中的內容是否相同,而且變量的類型也相同,例如...
如果您有一個等於 6 的整數變量和一個等於 6 的字符串,如果您使用==
檢查相等性,那么檢查將給出布爾值 true,如果您使用===
,它將給出一個假的。
這在弱類型編程語言中很有用,例如 JavaScript,其中隱式類型轉換很常見,有時您需要在相等檢查期間檢查類型和值。
就像 C# 一樣,你在聲明變量時聲明了類型,你不可能不知道,不知道變量類型是什么。 此外,C# 的 CLR 在它允許的類型轉換方面非常嚴格,並且要發生這種類型轉換,您必須顯式轉換它。 所有這些都在很大程度上使嚴格相等運算符變得多余。
在決策結構(如循環)中,您不會使用賦值運算符。 通常,在進行這些檢查時,您的變量已經定義並填充了數據,您將使用相等運算符(以及其他)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.