ホームページ > バックエンド開発 > C++ > C# で空のリストのジェネリック型パラメーターを決定する方法は?

C# で空のリストのジェネリック型パラメーターを決定する方法は?

Susan Sarandon
リリース: 2025-01-08 18:56:53
オリジナル
467 人が閲覧しました

How to Determine the Generic Type Parameter of an Empty List in C#?

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート