2017-09-04 236 views
0

我收到錯誤消息「不能隱式地從類型‘SpecificT’的方法ToViewDocument鍵入‘The.Right.Namespace.SpecificT’轉換。C#不能隱式類型從「T」轉換爲類型「T」

看來,在這個方法中,我重新定義類型SpecificT

這是方法,讓我的煩惱:

public override SpecifiedT 
ToViewDocument<SpecifiedT>(XmlEntity entity, DocKey docKey) 
    { 
     switch (docKey.IdArchive) 
     { 
      case IdArchive.A: 
       return ToAViewData((XmlDocA)entity, docKey) //error at this line; 
      default: 
       return ToBViewData((XmlDocB)entity, docKey) //error at this line; 
     } 
    } 

private SpecifiedT ToAViewData(XmlDocMassima entity, DocKey documentKey) 
    { 
     SpecifiedT result = new SpecifiedT(); 
     //map result on entity result 
     //... 
     return result; 
    } 

該功能覆蓋了基類的方法:

public abstract T ToViewDocument<T>(XmlEntity entity, DocKey documentKey) where T : ViewDocumentDto, new(); 

而且SpecifiedT延伸牛逼,所以我不明白爲什麼編譯器不能識別SpecifiedT爲T.

+0

包含的類定義是什麼樣的? –

+0

你想'SpecifiedT'是一個實際的類?或者你打算將它作爲一個類型參數嗎? –

+0

在'ToViewDocument'' SpecifiedT'是一個類型參數,但是在'ToAViewData'中它似乎是一個具體的類?如果是這樣,這將不會起作用,因爲它是在調用'ToViewDocument'時選擇'SpecifiedT'的客戶端,例如'ToViewDocument (entity,docKey)'。 – Lee

回答

3

的一個子類不能覆蓋的通用方法,並指定類型參數。您可以將類型參數添加到包含的類中。然後當你實現這個類時,類型參數將被設置爲具體類型。

abstract class Container<T> 
    where T : ViewDocumentDto, new() 
{ 
    public abstract T ToViewDocument(XmlEntity entity, DocKey documentKey); 
} 

class SpecificContainer : Container<SpecificViewDocumentDto> 
{ 
    public override SpecificViewDocumentDto ToViewDocument(XmlEntity entity, DocKey documentKey) 
    { 
    } 
} 
相關問題