1

型の文字列表現があり、その特定の型のリストを取得する必要があります。私はこれを試しています:

var string_rep = "Double";
var list = _context.Entity.ToList<Type.GetType(string_rep)>();

「Operator < は型メソッド グループおよび System.Type のオペランドには適用できません」というメッセージが表示されます。それを行う正しい方法は何ですか?感謝します。

4

2 に答える 2

6

listリストの実際のジェネリック型が実行時までわからない場合、変数を型付けする方法がないため、最初からリストを厳密に型付けするメリットはありません。以下を使用することもできます。

var list = _context.Entity.ToList<object>();

その方法を使用する以外に、コンパイル時のサポートを得る方法はありません。

たとえば、次を使用して、リフレクションを使用してリストを作成できます。

public static IList ToList(this IEnumerable source, string typeName)
{
    return ToList(source, Type.GetType(typeName));
}

public static IList ToList(this IEnumerable source, Type type)
{
    var list = (IList)Activator.CreateInstance(
        typeof(List<>).MakeGenericType(type));
    foreach(object item in source) list.Add(item);
    return list;
}

最初の例よりもこれら 2 つのいずれかを使用する唯一の利点は、リストに任意のタイプのobject. 通常、これは重要ではありませんが、リストに存在してはならないアイテムを許可することよりも、例外を認めた方がよい場合があります。

于 2013-02-15T17:33:19.473 に答える
0

Reflection を使用して、実行時にこれを行うことができます。次の投稿を参照してください。

C# ジェネリック リスト <T> T の型を取得する方法は?

于 2013-02-15T17:35:56.820 に答える