从类型的字符串表示中获取列表(T)

时间:2013-02-15 17:30:42

标签: c# .net entity-framework

我有一个类型的字符串表示,我需要获取该特定类型的列表。我正在尝试这个:

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

我得到“运算符&lt;不能应用于类型方法组和System.Type的操作数”。这样做的正确方法是什么?欣赏它。

2 个答案:

答案 0 :(得分: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;
}

在第一个示例中使用这两个中的一个的唯一优点是,向列表中添加不是指定类型的项会抛出异常,而不是允许列表包含任何类型的object。通常情况下这并不重要,但最好让异常面对允许不应该存在于列表中的项目。

答案 1 :(得分:0)

您可以使用Reflection在运行时执行此操作。请参阅以下帖子:

C# generic list <T> how to get the type of T?