ホームページ >バックエンド開発 >C++ >C# で Null 許容値型をジェネリック型パラメーターとして直接使用できないのはなぜですか?

C# で Null 許容値型をジェネリック型パラメーターとして直接使用できないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 15:58:43452ブラウズ

Why Can't Nullable Value Types Be Used Directly as Generic Type Parameters in C#?

ジェネリック パラメーターとしての Null 許容型

int? などの Null 許容値型は、値を保持するか null である可能性を表します。 Null 許容データの処理には便利ですが、汎用パラメーターとして使用する場合には制限があります。

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

myYear = record.GetValueOrNull<int?>("myYear");

このコードは、GetValueOrNull によって返された Null 許容値をnull 許容の int 変数 (myyear)。ただし、コンパイラは「型 'int?'」というエラーをスローします。ジェネリック型またはメソッドのパラメーター 'T' として使用するには、参照型である必要があります。

ここでの問題は、GetValueOrNull が null 許容値ではなく参照型 (オブジェクト) を返すように定義されていることです。タイプ。これを解決するには、戻り値の型を Nullable に変更します。そして、null 非許容パラメータを指定してメソッドを呼び出します:

static void Main(string[] args)
{
    int? i = GetValueOrNull<int>(null, string.Empty);
}

public static Nullable<T> GetValueOrNull<T>(DbDataRecord reader, string columnName) where T : struct
{
    object columnValue = reader[columnName];

    if (!(columnValue is DBNull))
        return (T)columnValue;

    return null;
}

戻り値の型を Nullable に変更することで、メソッドは myyear のような null 許容変数に割り当てられる null 許容値の型を返すようになります。 .

以上がC# で Null 許容値型をジェネリック型パラメーターとして直接使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。