ホームページ >バックエンド開発 >C++ >C# の汎用制約で値の型、Null 許容値の型、および参照型を区別するにはどうすればよいですか?

C# の汎用制約で値の型、Null 許容値の型、および参照型を区別するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 07:04:14517ブラウズ

How Can We Differentiate Value Types, Nullable Value Types, and Reference Types in C# Generic Constraints?

ジェネリック制約における値型と参照型の区別

ジェネリック型を扱う場合、多くの場合、値型、NULL 許容値型、および参照型を区別する必要があります。次のコードを考えてみましょう:

static void Foo<T>(T a) where T : struct { } // 1

static void Foo<T>(T? a) where T : struct { } // 2

このコードは、値の型 (1) と null 許容値の型 (2) を正常に処理します。ただし、次の制約を使用して参照型 (3) を検出しようとするとコンパイルされません:

static void Foo<T>(T a) where T : class { } // 3

エラー メッセージは、同じ署名を持つメンバーが既に存在することを示します。この問題は、制約は署名の一部ではなく、パラメータは署名の一部であるために発生します。これを解決するには、パラメーターに制約を配置します。

class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }

static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3

このアプローチにより、3 つのケースを区別することができます。

以上がC# の汎用制約で値の型、Null 許容値の型、および参照型を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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