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 つの方法があります:
デフォルト値を返します: default(T)
を使用して T 型のデフォルト値を返すことができます。これは、参照型の場合は null を返し、値の型の場合は適切なデフォルト値を返します (例: int の場合は 0、char の場合は ')。 '.
T を参照型に制限する: T が参照型のみであることがわかっている場合は、メソッド宣言に where T : class
制約を追加できます。これにより、通常どおり null を返すことができます。
T を null 以外の値型に制限する: T が null 以外の値型になることがわかっている場合は、where T : struct
制約を追加して、通常どおり null を返すことができます。これは、null 参照ではなく、null 許容値型の null 値を返すことに注意してください。
以上が型パラメーター T を持つ C# ジェネリック メソッドから安全に Null を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。