我有一个Document类,它有两个重载,每个重载一个参数(String和Stream)。为什么我不能使用以下代码使用泛型初始化Document类?
public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T>
public T Rotate(T file, int pageNumber, float angle)
{
Document document = new Document(file); // cannot convert from 'T' to 'Stream'
document.Pages[pageNumber].Rotation = (RotationMode)angle;
document.SavePage(pageNumber);
return file;
}
答案 0 :(得分:3)
如果您将声明更改为:
,则可以这样做public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T> where T : Stream
答案 1 :(得分:2)
您需要在班级声明中添加type constraint:
public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T>
where T : Stream
答案 2 :(得分:1)
我看到一些建议要求T继承Stream。这将有效。但是,如果你的T确实总是一个流,为什么不删除泛型参数并构建这样的类:
public abstract class PdfDocumentEditBaseService : IDocumentEditService
{
public Stream Rotate(Stream file, int pageNumber, float angle)
{
Document document = new Document(file);
document.Pages[pageNumber].Rotation = (RotationMode)angle;
document.SavePage(pageNumber);
return file;
}
答案 3 :(得分:0)
问题似乎是Document类的构造函数需要一个Stream或Stream派生的参数。在编写代码时,无法保证T将成为Stream。
如果在类声明中添加类型约束,则应该起作用:
public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T> where T : Stream