5

ジェネリック型が とnull(および のみとnull) 比較される場合、これにより、コンパイラは型を null 許容 (これは問題ありません) と等値許容の両方として制約します。

なぜ後者なのですか?nullnull 許容型の場合は、と比較するだけで問題ないようですが、等価性はサポートされていません。

Null 許容制約だけを取得するために使用できることはわかっていますが、同等の引数が必要Unchecked.equalsな明らかな理由が欠けているかどうか疑問に思っています。((=) null)

4

1 に答える 1

10

(=)演算子の型は'a -> 'a -> bool when 'a : equalityです。したがって、演算子を使用すると、引数の型が制約されて等価性がサポートされます。null リテラルと比較する場合、これが技術的に不必要な制限であることは事実ですが、コンパイラが特殊なケースとして扱うのではなく、通常の推論手順を使用することは合理的だと思います。

obj.ReferenceEquals(x, null)追加された制約が好ましくない場合は、代わりにいつでも使用できることに注意してください。

于 2012-10-26T14:04:30.513 に答える