2010-02-02 30 views
3

我有一個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; 
    } 

回答

1

我看到了一些建議,要求t若要從流繼承。這將起作用。但是,如果你的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; 
    } 
+0

Document類有兩個重載,每個參數是Stream和其他是String。我想用泛型來處理這種情況。 – Raj 2010-02-02 15:31:00

+0

爲什麼?過載在這裏看起來更合適。 – 2010-02-02 17:22:33

+0

+1同意泛型並不總是合適的,重載似乎更適合在這裏 – Pharabus 2010-02-02 20:48:54

3

你可以做,如果你改變你的聲明,大意是:

public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T> where T : Stream 
2

你需要一個type constraint添加到您的類聲明:

public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T> 
              where T : Stream 
0

這個問題似乎是在Document類的構造函數需要一個Stream或從Stream派生的參數。由於代碼被寫入,所以不能保證T將是一個流。

如果添加類型約束類聲明這應該工作:

public abstract class PdfDocumentEditBaseService<T> : IDocumentEditService<T> where T : Stream