作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我写了下面的方法:
public T CreatePackage<T>() where T : new()
{
var package = new T();
if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;
// ...
return compInfoPackage;
}
throw new System.NotImplementedException();
}
我检查 T 是什么类型,并据此处理我的变量 Package。当我想返回它时,我遇到了编译器错误。
“ComponentInformationPackage 类型无法隐式转换为 T”
我该如何解决这个问题?
最佳答案
首先:在强制转换不起作用的地方,安全强制转换会起作用:
return CompInfoPackage as T;
...假设 T
上有一个 class
约束:
public static T CreatePackage<T>() where T : class, new() { ... }
第二:给定这段代码:
var package = new T();
if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;
// ...
return (T)compInfoPackage;
}
...您已经有了对新对象的引用 package
。因为它是 T
类型,所以编译器已经喜欢它作为返回类型。为什么不返回?
var package = new T();
if (typeof(ComponentInformationPackage) == typeof(T))
{
var compInfoPackage = package as ComponentInformationPackage;
// ...
return package; // Same object as compInfoPackage
}
关于c# - 在泛型方法中返回特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35033447/
我是一名优秀的程序员,十分优秀!