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

本文关键字:列表 获取 类型 字符串 表示 | 更新日期: 2023-09-27 17:59:39

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

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

我得到了"运算符<不能应用于类型方法组和System.type的操作数"。正确的方法是什么?感谢。

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

由于无法将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。通常情况下,这并不重要,但在允许列表中不应该存在的项目时,最好有一个例外。

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

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