0

次のコードがあります。

    TConverted ret;
    ret = forward.Get<TConverted>(GetForwardKey(id, convType));
    if (ret != default(TConverted))... // wrong here !

一般的な Get 関数は、キャッシュからアイテムを返します。値型またはクラスにすることができます。戻り値がnullかデフォルトかを確認したいのですが、動作するはずのコードは動作しません。することは可能ですか?

4

1 に答える 1

3

この本質的に同じ質問から...

箱詰めを避けるために、ジェネリックが等しいかどうかを比較する最良の方法は、 を使用すること EqualityComparer<T>.Defaultです。IEquatable<T>これは、 (ボクシングなしで) を尊重しobject.Equals、すべてのNullable<T> 「持ち上げられた」ニュアンスを処理します。したがって:

if(EqualityComparer<T>.Default.Equals(obj,default(T)) {
    return obj;
}

これは一致します:

  • クラスの null
  • null (空)Nullable<T>
  • 他の構造体の場合は zero/false/etc

これが役に立った場合は、リンク先の質問に対する Mark Gravell の回答 (引用しました) に賛成票を投じてください。

于 2012-08-01T13:08:08.333 に答える