ジェネリックメソッド<T>()からジェネリックList<T>を返すにはどうすればよいですか

いす

おはようございます、

辞書を持つクラス Product{} があります。

Dictionary<Type, List<IPropertyItem>> extensions;

この方法でデータを保存します。

public void SaveItem<T>(T item)
    {
        Type currentType = typeof(T);

        if (!extensions.ContainsKey(currentType))
        {
            extensions.Add(currentType, new List<IPropertyItem>());
        }

        if (currentType == typeof(Discount))
        {
            Discount newDiscount = (Discount)Convert.ChangeType(item, typeof(Discount));                
            extensions[currentType].Add(newDiscount);
        }
        else if(currentType == typeof(Tax))
        {
            Tax newTax = (Tax)Convert.ChangeType(item, typeof(Tax));
            extensions[currentType].Add(newTax);
        }
        else if(currentType == typeof(Size))
        {
            Size newSize = (Size)Convert.ChangeType(item, typeof(Size));
            extensions[currentType].Add(newSize);
        }           
    }

今、私は自分の辞書に保存されている特定の値型のリストを取得したいと思っています。つまり、このメソッドが次の関数のようなリストを返すことを意味します:

public List<T> GetExtensionsDictionary<T>()
    {
        Type currentType = typeof(T);
        List<T> returnedList = new List<T>();

        if (!extensions.ContainsKey(currentType))
        {
            return null;
        }

        return extensions[T];            
    }

上記を呼び出しているメソッドは次のとおりです。

List<Discount> myDiscounts = myProduct.GetExtensionsDictionary<Discount>();

トンクス、

どんな助けも感謝します...

ブライアン・フェアサービス

私はこれがあなたが望むすべてだと信じています:

public List<T> GetExtensionsDictionary<T>()
{
    Type currentType = typeof(T);
    List<T> returnedList = new List<T>();

    if (!extensions.ContainsKey(currentType))
    {
        return null;
    }

    return extensions[currentType].Cast<T>().ToList();            
}

はジェネリック パラメーターであり、 で取得するランタイム タイプが必要なためextensionscurrentTypenotにインデックスを付ける必要がありますTTtypeof

linq メソッドCastToList使用currentTypeて、ディクショナリのコレクション atを に変換できList<T>ます。これはリストのコピーを作成しているため、パフォーマンスに関する考慮事項に注意してください。

いることを確認してください using System.Linq;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

List <Object>をObservableList <S>とMap <T、S>に変換するジェネリックメソッドを作成するにはどうすればよいですか?

分類Dev

Tによって動作が異なるジェネリックメソッドを作成するにはどうすればよいですか?

分類Dev

Typescriptのジェネリックメソッド内でTの型を取得するにはどうすればよいですか?

分類Dev

静的ジェネリックメソッドでTのデフォルトタイプを設定するにはどうすればよいですか?

分類Dev

ジェネリック型T []を引数として持つメソッドを呼び出すにはどうすればよいですか?

分類Dev

Tの型を知らずに、ジェネリック型List <T>の「isX」型ガードを作成するにはどうすればよいですか?

分類Dev

ジェネリックを使用してJavaでList <?>からList <T>に変換するにはどうすればよいですか?

分類Dev

Tジェネリックのタイプを取得するにはどうすればよいですか?

分類Dev

ジェネリックメソッドを使用してList <T>を配列t [](プリミティブ型の場合)に変換するにはどうすればよいですか?

分類Dev

TypeNameからTを取得してジェネリックメソッドに渡す

分類Dev

ジェネリッククラスまたはメソッドのメンバーからTの型を取得するにはどうすればよいですか?

分類Dev

ジェネリックメソッドとは何ですか?この場合、<T>はどのようにバインドされますか?

分類Dev

ジェネリックメソッドとは何ですか?この場合、<T>はどのようにバインドされますか?

分類Dev

ジェネリックメソッドはTの値を設定します

分類Dev

Class<T> をジェネリック メソッドに送信する方法

分類Dev

メソッド本体でジェネリック引数を使用する<T>

分類Dev

<T> T、<T、V> Query <T>、Class <T>などのJavaジェネリックを解釈するにはどうすればよいですか?

分類Dev

ジェネリックメソッドTは拡張します

分類Dev

メンバーメソッドにアクセスするジェネリック<T>静的メソッド

分類Dev

Arc <Mutex <MyStruct <T >>>を使用してスレッド間でジェネリック構造体を共有するにはどうすればよいですか?

分類Dev

ジェネリックメソッドはTをオブジェクト型にキャストします

分類Dev

ジェネリックメソッド-「型からTに準拠するためのチェックされていない変換」警告

分類Dev

Java:ジェネリックス:ジェネリックメソッドからT型のオブジェクトを取得し、そのメソッドにアクセスする

分類Dev

Tがジェネリックメソッドのオブジェクトのリストであるかどうかを確認する方法

分類Dev

Javaジェネリック<?スーパーT>:該当しないメソッド

分類Dev

TypeScriptジェネリックメソッドで変数をTに変換しますか?

分類Dev

ジェネリックメソッドでTの代わりにどのタイプが選択されたかを理解するにはどうすればよいですか?

分類Dev

'T'ジェネリック型が 'void'の場合にパラメータを削除するにはどうすればよいですか?

分類Dev

C#で、ジェネリックパラメーターFunc <T、TResult>をパラメーターとして持つラムダを受け取る拡張メソッドを作成するにはどうすればよいですか。

Related 関連記事

  1. 1

    List <Object>をObservableList <S>とMap <T、S>に変換するジェネリックメソッドを作成するにはどうすればよいですか?

  2. 2

    Tによって動作が異なるジェネリックメソッドを作成するにはどうすればよいですか?

  3. 3

    Typescriptのジェネリックメソッド内でTの型を取得するにはどうすればよいですか?

  4. 4

    静的ジェネリックメソッドでTのデフォルトタイプを設定するにはどうすればよいですか?

  5. 5

    ジェネリック型T []を引数として持つメソッドを呼び出すにはどうすればよいですか?

  6. 6

    Tの型を知らずに、ジェネリック型List <T>の「isX」型ガードを作成するにはどうすればよいですか?

  7. 7

    ジェネリックを使用してJavaでList <?>からList <T>に変換するにはどうすればよいですか?

  8. 8

    Tジェネリックのタイプを取得するにはどうすればよいですか?

  9. 9

    ジェネリックメソッドを使用してList <T>を配列t [](プリミティブ型の場合)に変換するにはどうすればよいですか?

  10. 10

    TypeNameからTを取得してジェネリックメソッドに渡す

  11. 11

    ジェネリッククラスまたはメソッドのメンバーからTの型を取得するにはどうすればよいですか?

  12. 12

    ジェネリックメソッドとは何ですか?この場合、<T>はどのようにバインドされますか?

  13. 13

    ジェネリックメソッドとは何ですか?この場合、<T>はどのようにバインドされますか?

  14. 14

    ジェネリックメソッドはTの値を設定します

  15. 15

    Class<T> をジェネリック メソッドに送信する方法

  16. 16

    メソッド本体でジェネリック引数を使用する<T>

  17. 17

    <T> T、<T、V> Query <T>、Class <T>などのJavaジェネリックを解釈するにはどうすればよいですか?

  18. 18

    ジェネリックメソッドTは拡張します

  19. 19

    メンバーメソッドにアクセスするジェネリック<T>静的メソッド

  20. 20

    Arc <Mutex <MyStruct <T >>>を使用してスレッド間でジェネリック構造体を共有するにはどうすればよいですか?

  21. 21

    ジェネリックメソッドはTをオブジェクト型にキャストします

  22. 22

    ジェネリックメソッド-「型からTに準拠するためのチェックされていない変換」警告

  23. 23

    Java:ジェネリックス:ジェネリックメソッドからT型のオブジェクトを取得し、そのメソッドにアクセスする

  24. 24

    Tがジェネリックメソッドのオブジェクトのリストであるかどうかを確認する方法

  25. 25

    Javaジェネリック<?スーパーT>:該当しないメソッド

  26. 26

    TypeScriptジェネリックメソッドで変数をTに変換しますか?

  27. 27

    ジェネリックメソッドでTの代わりにどのタイプが選択されたかを理解するにはどうすればよいですか?

  28. 28

    'T'ジェネリック型が 'void'の場合にパラメータを削除するにはどうすればよいですか?

  29. 29

    C#で、ジェネリックパラメーターFunc <T、TResult>をパラメーターとして持つラムダを受け取る拡張メソッドを作成するにはどうすればよいですか。

ホットタグ

アーカイブ