我有两个这样的课程
public class excel: document{
}
public class pdf: document{
}
和基类文档。
我有一个枚举
public enum DocumentType{
excel = 1,
pdf = 2
}
我有一个带有泛型方法实现方法的核心类
public class manager{
LoadFile<T> (Stream stream) where T: document{
...
}
}
我可以用这样的命令调用loadfile方法吗
Type GetType(DocumentType documentType){
...
}
LoadFile<GetType(DocumentType.excel)>(myStream){
...
}
我希望枚举创建一个通用参数。
错误是
&LT; generic不能应用于类型&#39;方法组&#39;
的操作数
答案 0 :(得分:0)
如果您在编译时知道类型,例如&#34;请加载此pdf,它肯定会是一个pdf&#34; - 然后我根本没有理由去看仿制药。你只是在用流数据实例化对象并让它自己构建时,你不会自己保存。
// for example
class pdf : document {
public pdf(Stream stream)
{
// load the pdf data from the stream here
}
}
对于您不了解对象类型的情况,&#34;加载用户选择的文件,它可能是pdf,可能是excel文件&#34;,您也不会...我想要担心泛型。相反,您需要一个返回基本文档类型的函数 - 因为您在加载之前不知道它是什么类型(即在编译时,您不知道 - 所以您不能使用泛型):
document LoadFromStream(Stream stream)
{
var typeOfDocument = SomeMethodToFindTheFileTypeFromTheStream(stream);
switch(typeOfDocument)
{
case DocumentType.pdf:
return LoadPDFFromStream(stream); // returns pdf object
case DocumentType.excel:
return LoadExcelFromStream(stream); // returns an excel object
default:
throw new Exception("Document is not a supported type");
}
}
如果您需要特定对象,则需要使用对象内的信息(例如文档类型枚举)向下转换它,以确定将其强制转换为哪种类型。
我担心没有银弹通用的解决方案。如果您在编译时知道文件类型,泛型并不能保存任何内容。如果你没有 - 你需要一些条件逻辑来确定它实际是什么类型(无论是在加载之前还是之后,例如使用文件扩展名来决定)。
泛型无法为您节省时间或让您的生活更轻松。