ホームページ > バックエンド開発 > C++ > 型パラメーター T を持つ C# ジェネリック メソッドから安全に Null を返すにはどうすればよいですか?

型パラメーター T を持つ C# ジェネリック メソッドから安全に Null を返すにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-09 17:26:43
オリジナル
710 人が閲覧しました

How Can I Safely Return Null from a C# Generic Method with a Type Parameter T?

C# のジェネリック メソッドから Null 値を返す

C# のジェネリック メソッドでは、型パラメーターが参照型または値型の場合に null を返すのは必ずしも簡単ではありません。この問題は、戻り値の型が型パラメーター T である場合に発生します。

次のコード スニペットを考えてみましょう:

<code class="language-csharp">static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach (T thing in collection)
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // 错误:无法将 null 转换为类型参数“T”,因为它可能是值类型。请考虑改用“default(T)”代替。
}</code>
ログイン後にコピー

このコードは、一致する要素がコレクション内に見つからない場合に null を返そうとしますが、ビルド エラーが発生します。エラー メッセージには、T が値型である可能性があるため、null を型パラメーター T に変換できないことが示されています。

この問題を解決するには 3 つの方法があります:

  1. デフォルト値を返します: default(T) を使用して T 型のデフォルト値を返すことができます。これは、参照型の場合は null を返し、値の型の場合は適切なデフォルト値を返します (例: int の場合は 0、char の場合は ')。 '.

  2. T を参照型に制限する: T が参照型のみであることがわかっている場合は、メソッド宣言に where T : class 制約を追加できます。これにより、通常どおり null を返すことができます。

  3. T を null 以外の値型に制限する: T が null 以外の値型になることがわかっている場合は、where T : struct 制約を追加して、通常どおり null を返すことができます。これは、null 参照ではなく、null 許容値型の null 値を返すことに注意してください。

以上が型パラメーター T を持つ C# ジェネリック メソッドから安全に Null を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート