c# - 将表类型作为 T 传递给通用列表

标签 c# list entity-framework generics

我有一个名为 myTable 的表。使用 EntityFramework,我可以像这样创建一个查询 myTable 的列表:

List<myTable> myList = context.myTables.ToList();

我想在“Utilities”类中创建一个可重用的方法,我可以在其中向该方法传递一个表类型并创建该类型的列表。

类似于:

public static void ListFromType(Type suppliedTableType)
{
    List<supliedTableType> myList = new List<suppliedTableType>();
}

最佳答案

你正在尝试做的事情不会编译(我相信你知道)

public static void ListFromType(Type suppliedTableType)
{
    List<supliedTableType> myList = new List<suppliedTableType>();
}

首先方法是 void这意味着它什么都不返回,其次你使用的是 System.Type实例作为通用类型参数不起作用。

当您查看问题时,它会引出一个问题,为什么要这样做呢?您总是必须知道创建列表实例的类型,那么为什么不一直直接分配一个列表呢?为什么要调用辅助方法来简单地做:

List<myTable> someList = new List<myTable>();
// or to save yourself from typing myTable twice
var someList = new List<myTable>();

如果您真的想要一些实现完全相同的奇特 Linq,您可以使用 Enumerable.Empty<T>并调用ToList()在上面:

List<myTable> someList = Enumerable.Empty<myTable>().ToList();

如果您的目标是基于 System.Type 创建列表变量(如非编译代码示例中所示),则必须混合使用反射和 Enumerable 的其他方法. @Camilo 指出了 fairly relevant question and answer这可以帮助解决这些问题。你的问题被标记为泛型而不是反射,所以我不想做太多假设。

关于c# - 将表类型作为 T 传递给通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50222775/

相关文章:

c# - 在模拟下调用时 CredWrite 返回 1312

c# - 处理与服务定位器模式一起使用时 MongoDB 如何存储 DateTime

c# - 如何使用 Entity Framework 访问子表

c# - 使用 ScrollViewer 单击并拖动滚动

c# - 仅使用一个线程配置 Quartz.net 或按顺序创建线程

python - 如何在 Python 中迭代嵌套列表时访问对象的属性?

Python:替换多个列表中出现的项目?

java - 将列表从 Java 返回到 Freemarker

c# - Lambda 表达式中 SQL WHERE 的等效项是什么?

c# - -在 Scaffold-DbContext 中无法识别命名空间选项