C#には2つのオブジェクトがあり、それがブール型か他の型かわかりません。しかし、これらのC#を比較しようとすると、正しい答えが得られません。私はVB.NETで同じコードを試しましたが、それで終わりました!
誰かが解決策がある場合にこれを修正する方法を教えてもらえますか?
C#:
object a = true;
object b = true;
object c = false;
if (a == b) c = true;
MessageBox.Show(c.ToString()); //Outputs False !!
VB.NET:
Dim a As Object = True
Dim b As Object = True
Dim c As Object = False
If (a = b) Then c = True
MessageBox.Show(c.ToString()) '// Outputs True
a
、ボクシングを取得し、を含むボックスを作成しますtrue
。に割り当てると、b
を含む別のボックスが表示されますtrue
。とを比較するa
とb
、どちらもコンパイル時のタイプであるため、C#言語仕様で定義されてobject
いるオーバーロードを呼び出しますoperator ==(object, object)
。このオーバーロードは、参照が同じオブジェクトを指すかどうかを確認します。あなたが持っているので、2箱を、結果はfalse
、そしてあなたの「下」文if
意志は実行されません。これをよりよく理解するには、の割り当てb
をこれに変更してみてobject b = a;
ください。これでボックスが1つだけになりました。
a.Equals(b)
か?