C# では 2 つのオブジェクト タイプを比較できないのに、VB では比較できないのはなぜですか? 質問する

C# では 2 つのオブジェクト タイプを比較できないのに、VB では比較できないのはなぜですか? 質問する

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

ベストアンサー1

C#では、==演算子(参照型式に適用された場合)は、参照同等性チェックは過負荷ボクシング変換の結果である 2 つの参照を比較しているので、それらは異なる参照です。

編集: をオーバーロードする型では==、異なる動作を得ることができますが、それは に基づいていますコンパイル時式の型。たとえば、stringprovides ==(string, string):

string x = new string("foo".ToCharArray());
string y = new string("foo".ToCharArray());
Console.WriteLine(x == y); // True
Console.WriteLine((object) x == (object) y); // False

ここで、最初の比較ではオーバーロードされた演算子が使用されていますが、2 番目の比較では「デフォルト」の参照比較が使用されています。

VBでは、=演算子はさらに多くのことを行います。単に を使用するのと同等ではありませんobject.Equals(x, y)Option Compareテキストの比較方法に影響を与える可能性があります。

基本的に、演算子は同じ方法で動作せず、意図されました同じように動作します。

おすすめ記事