型の文字列表現があり、その特定の型のリストを取得する必要があります。私はこれを試しています:
var string_rep = "Double";
var list = _context.Entity.ToList<Type.GetType(string_rep)>();
「Operator < は型メソッド グループおよび System.Type のオペランドには適用できません」というメッセージが表示されます。それを行う正しい方法は何ですか?感謝します。
型の文字列表現があり、その特定の型のリストを取得する必要があります。私はこれを試しています:
var string_rep = "Double";
var list = _context.Entity.ToList<Type.GetType(string_rep)>();
「Operator < は型メソッド グループおよび System.Type のオペランドには適用できません」というメッセージが表示されます。それを行う正しい方法は何ですか?感謝します。
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
. 通常、これは重要ではありませんが、リストに存在してはならないアイテムを許可することよりも、例外を認めた方がよい場合があります。
Reflection を使用して、実行時にこれを行うことができます。次の投稿を参照してください。