C# で空のリストのジェネリック型パラメーターを決定するにはどうすればよいですか?
C# で汎用リスト (List<T>
) を使用するには、通常、リスト要素の型に関する情報を取得する必要があります。ただし、汎用リストが空の場合、この型を取得するのは困難になります。
一般的なアプローチは、リフレクションを使用して、空のリストを保持する myclass
オブジェクトのプロパティをチェックすることです。ただし、空のリストのプロパティは null に初期化されるため、(元のコードに示されているように) プロパティ値を直接使用すると失敗します。
この状況を克服するには、別のアプローチが必要です:
Type type = pi.PropertyType; if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) { Type itemType = type.GetGenericArguments()[0]; // 使用此方法... }
このコードはまず、checked 属性の PropertyType
を取得します。次に、この型がジェネリック型であるかどうか、およびそのジェネリック型定義が typeof(List<>)
であるかどうかを確認します。これらの条件が満たされる場合、コードは GetGenericArguments()
メソッドを使用してリスト要素の型を抽出します。
通常、IList<T>
をサポートするために、追加のチェックを実行できます:
foreach (Type interfaceType in type.GetInterfaces()) { if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>)) { Type itemType = interfaceType.GetGenericArguments()[0]; // 注意这里使用interfaceType // 执行某些操作... break; } }
このコードは、型が実装するすべてのインターフェイスをチェックし、IList<T>
ジェネリック型定義を持つジェネリック インターフェイスを識別します。次に、以前と同様の方法で要素タイプを抽出します。 ここでは、interfaceType
ではなく type
から汎用パラメーターを取得していることに注意してください。
この改訂された説明では、プロセスが明確になり、2 番目のコード スニペットの小さなエラーが修正され、より説明的な見出しと文構造が使用されています。
以上がC# で空のリストのジェネリック型パラメーターを決定する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。