分配类型.net

时间:2017-01-16 08:06:14

标签: c# .net types

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>();

我正在尝试根据reportType条件将类型分配到List中。但有些错误。

我该怎么做?

提前致谢!

编辑:错误; 严重性代码描述项目文件行抑制状态 错误CS0118“T”是一个变量,但类似于

4 个答案:

答案 0 :(得分:4)

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

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!

答案 1 :(得分:2)

我担心这无法完成:

泛型的全部意义在于提供编译时的安全性。因此,类型对象不能用作通用参数。

有关详细信息,请参阅答案here

答案 2 :(得分:0)

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

Type T;

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

var constructedListType = typeof(List<>).MakeGenericType(T);
var instance = Activator.CreateInstance(constructedListType);

答案 3 :(得分:-1)

只需使用dynamic作为参数:

var result = new List<dynamic>();

有关更多信息,请参阅:https://msdn.microsoft.com/en-us/library/dd264736.aspx

另请参阅此相关问题:How to create a List with a dynamic object type C#