1

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

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

我得到“运算符 < 不能应用于类型方法组和 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;
}

与第一个示例相比,使用这两个中的一个的唯一优点是向列表中添加不属于指定类型的项目会引发异常,而不是允许列表包含任何类型的object. 通常这并不重要,但最好让例外情况出现在您的面前,而不是允许不应该存在的项目进入列表。

于 2013-02-15T17:33:19.473 回答
0

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

C#泛型列表<T>如何获取T的类型?

于 2013-02-15T17:35:56.820 回答