C# 分配类型.net T型; 如果(report.ReportType==0){ T=类型(报告类型); }else if(report.ReportType==11){ T=类型(振动); } 列表结果=新列表();

C# 分配类型.net T型; 如果(report.ReportType==0){ T=类型(报告类型); }else if(report.ReportType==11){ T=类型(振动); } 列表结果=新列表();,c#,.net,types,C#,.net,Types,我试图根据reportType条件将类型分配到列表中。但也有一些错误 我该怎么做 提前谢谢 编辑:错误; 严重性代码说明项目文件行抑制状态 错误CS0118“T”是一个变量,但其使用方式与类型类似,恐怕无法执行此操作: 泛型的全部目的是提供编译时安全性。因此,类型对象不能用作泛型参数 有关更多信息,请参阅答案。恐怕无法做到这一点: 泛型的全部目的是提供编译时安全性。因此,类型对象不能用作泛型参数 有关更多信息,请参阅答案。确保ReportTempHum和ReportVibration具有相同的界

我试图根据reportType条件将类型分配到列表中。但也有一些错误

我该怎么做

提前谢谢

编辑:错误; 严重性代码说明项目文件行抑制状态
错误CS0118“T”是一个变量,但其使用方式与类型类似,恐怕无法执行此操作:

泛型的全部目的是提供编译时安全性。因此,类型对象不能用作泛型参数


有关更多信息,请参阅答案。

恐怕无法做到这一点:

泛型的全部目的是提供编译时安全性。因此,类型对象不能用作泛型参数


有关更多信息,请参阅答案。

确保ReportTempHum和ReportVibration具有相同的界面

Type T;

if (report.ReportType == 0) {
    T = typeof(ReportTempHum);
} else if (report.ReportType == 11){
    T = typeof(ReportVibration);
}

List<(Type)T> result = new List<(Type)T>();
列表结果;
如果(report.ReportType==0){
结果=新列表();
}else if(report.ReportType==11){
结果=新列表();
}
//请注意,验证列表不为空!

确保ReportTempHum和ReportVibration具有相同的界面

Type T;

if (report.ReportType == 0) {
    T = typeof(ReportTempHum);
} else if (report.ReportType == 11){
    T = typeof(ReportVibration);
}

List<(Type)T> result = new List<(Type)T>();
列表结果;
如果(report.ReportType==0){
结果=新列表();
}else if(report.ReportType==11){
结果=新列表();
}
//请注意,验证列表不为空!

只需使用dynamic作为参数:

List<IReportType> result;
        if (report.ReportType == 0) {
            result = new List<ReportTempHum>();
        } else if (report.ReportType == 11){
            result = new List<ReportVibration>();
        }

        //note to verify List is not null!
var result=newlist();
有关更多信息,请参阅:


另请参见此相关问题:

仅使用dynamic作为参数:

List<IReportType> result;
        if (report.ReportType == 0) {
            result = new List<ReportTempHum>();
        } else if (report.ReportType == 11){
            result = new List<ReportVibration>();
        }

        //note to verify List is not null!
var result=newlist();
有关更多信息,请参阅:


另请参见此相关问题:

使用此代码,您可以获得类型T的列表。但是,请记住,它不是强类型的

var result = new List<dynamic>();
T型;
如果(report.ReportType==0){
T=类型(报告类型);
}else if(report.ReportType==11){
T=类型(振动);
}
var constructedListType=typeof(List).MakeGenericType(T);
var instance=Activator.CreateInstance(constructedListType);

使用此代码,您可以获得类型T的列表。但是,请记住它不是强类型的

var result = new List<dynamic>();
T型;
如果(report.ReportType==0){
T=类型(报告类型);
}else if(report.ReportType==11){
T=类型(振动);
}
var constructedListType=typeof(List).MakeGenericType(T);
var instance=Activator.CreateInstance(constructedListType);

您遇到了什么错误?您到底想达到什么目的?我已经回答了我认为最有可能出现的问题,但如果您提供了错误,我会进行调整。我刚刚添加了错误消息“您尝试过列表了吗?”谢谢@JamesHughes,但是不起作用。你遇到了什么错误?你到底想达到什么目的?我已经回答了我认为最有可能出现的问题,但如果你提供了错误,我会进行调整。我刚刚添加了错误消息你尝试过列表了吗?谢谢@JamesHughes,但不起作用。在他的例子中,
T
是一个类型对象,您不能将其用作泛型类型参数。在这种情况下,
T
是一个类型对象,您不能将其用作泛型类型参数。如果有很多选项,则可能值得打开
报表。ReportType
。是的。这是解决问题的另一种方法。但我正在通过使用“类型”来寻找解决方案。谢谢。然后尝试使用object(或其他最接近的类),每次处理列表的数据时,将其转换为T.@NewPHPer,但我正在使用您试图以错误方式解决问题的“类型”来寻找解决方案。为什么不使用多态性,这是OOP中最重要的一点,即使您的类的名称也告诉您它们必须具有相同的基础,例如
报告
类可能值得打开
报告。如果也有许多选项,则报告类型
。是的。这是解决问题的另一种方法。但我正在通过使用“类型”来寻找解决方案。谢谢。然后尝试使用object(或其他最接近的类),每次处理列表的数据时,将其转换为T.@NewPHPer,但我正在使用您试图以错误方式解决问题的“类型”来寻找解决方案。为什么不使用多态性呢?多态性是OOP中最重要的一点,即使是类的名称也告诉我们它们必须有相同的基,比如
Report
classDownvoted。通常,如果您必须使用
动态
,您的程序设计通常是错误的<代码>动态
并不是为了在常规C#代码中使用而发明的。通常,它只应在使用COM、动态类型语言库、ASP.NET MVC视图等时使用,而不是像这样的东西。通常,如果您必须使用
动态
,您的程序设计通常是错误的<代码>动态
并不是为了在常规C#代码中使用而发明的。通常,它只应在使用COM、动态类型语言库、ASP.NET MVC视图等时使用,而不是像这样的东西。