質問: B)で、同じと判定されません。 GetType()すると、両方とも、System.Singleです。 数字は両方、1や、2や、3等では駄目ですが、0のみ同じと判定されます。 また、ToString()や、(float)でキャストしてやると、0以外の数字でも同じと判定されます。 何か原因は考えられますでしょうか?
回答: **追記** 次のように回答していましたが、System.Single は参照型でなく 別の問題だろうとご指摘をいただきました。(Zuishinさんありがとうございます) 文字列型の場合は値を比較しますが、そうでない参照型の場合はインスタンスが同じものかどうかで判断されます。ただし、==演算子や、!=演算子のふるまいを上書きしていないはその限りではありません。 > > 組み込みの値型の場合、等値演算子 (==) ではオペランドの値が等しい場合に true が返され、それ以外の場合は false が返されます。 string 以外の参照型の場合、== では 2 つのオペランドが同じオブジェクトを参照する場合に true が返されます。 string 型の場合は、== は文字列の値を比較します。 > > > ユーザー定義の値の型は == 演算子をオーバーロードできます (「演算子」を参照)。 ユーザー定義参照型もオーバーロードはできますが、既定では、組み込み参照型とユーザー定義参照型のいずれに対しても == は前述のとおりに機能します。 == をオーバーロードする場合は、!= もオーバーロードする必要があります。 整数型に対する演算は、通常、列挙型で使用できます。 > > > --------------------------------------------------------------- > > 引用元: **== 演算子 (C# リファレンス) | Microsoft Docs** > > >