C# の汎用リストと型情報の取得
オブジェクト指向プログラミングのリフレクション メカニズムにより、開発者は実行時に型の構造と動作を検査できます。ジェネリック コレクション (List<T>
など) を使用する場合、その型のオブジェクトにアクセスまたは作成するには、ジェネリック パラメーター T
の型を取得する必要があります。
SomList
という名前の List<SomeClass>
プロパティを含むオブジェクトがあるとします。 SomList
が空の場合、汎用リスト内の T
の型を決定するにはどうすればよいですか?
この質問に答えるためにコード例を分析してみましょう:
<code class="language-csharp">// 假设 "GetListType" 是您用来检索类型的函数。 private Type GetListType(object myObject) { Type type = myObject.GetType(); if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type[] typeArguments = type.GetGenericArguments(); Type itemType = typeArguments[0]; // 这是泛型列表参数 `T` 的类型。 return itemType; } throw new ArgumentException("对象不包含泛型列表属性。"); }</code>
この改良されたコードでは、入力としてオブジェクトを受け取り、オブジェクトに空のジェネリック リスト プロパティが含まれている場合は GetListType
の型を返す T
という名前のメソッドを作成します。
このメソッドはリフレクションを使用して、オブジェクトの型がジェネリック型であるかどうか、およびジェネリック定義が List<>
型と一致するかどうかを判断します。これらの条件が満たされる場合、コードは型パラメーター (この場合、型パラメーターは 1 つだけです) を取得し、それを T
の型として返します。
このコードは、プロパティの値がアクセス可能 (null 以外) であることに依存していることに注意することが重要です。あなたのシナリオでは、SomList
が空の場合、null 値をチェックし、それに応じて処理することができます。
この改訂された応答は、元のイメージを維持し、説明の明確さと流れを改善し、リストが空の場合でも型 T
を決定するという中心的な問題に対処します。主な変更点は、List<>
型定義の処理です。より正確には。
以上がC# で空のジェネリック リスト内の T の型を判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。