2012-03-11 19 views
-1

我有一個方法:仿製藥使用,其中限制基類

private double FindPrice<T>(T l_Price_Breaks) where T : ? 
{ 
} 

?我想限制到3類X,Y,Z這三個班從一類稱爲子inheric:

public class X : Child 
public class Y : Child 
public class Z : Child 

我不能只是做:

private double FindPrice<T>(T l_Price_Breaks) where T : Child 
{ 
} 

它的工作原理,但是當我嘗試使用以下調用這個方法:

X MyX = new X(); 
double return = FindPrice(MyX); 

我得到「沒有從X到Child的隱式轉換」。

+6

如果編譯器說沒有從'X'到'Child'的轉換,那麼我確定它是正確的。如果你可以發佈一個簡短的*完整的*程序來證明問題,這將有所幫助。 (你發佈的代碼是無效的 - 你已經使用過'Public'而不是'public'兩次,並且你已經嘗試使用'return'作爲標識符。) – 2012-03-11 19:45:34

+1

即使在修復語法之後,與給定的樣本 - 這應該工作得很好。 – BrokenGlass 2012-03-11 19:46:23

+2

有一個名爲'Child'的基類......這是錯誤的。 – Kobi 2012-03-11 19:51:56

回答

1

這段代碼適用於我,但有一個例外:您有一個名爲return的變量名,它不起作用,因爲這是c#中的保留關鍵字。將它重命名爲result

0

你錯過喜歡的FindPrice執行一些基本的信息,但我帶你去,你在FindPrice方法的機身採用Child代替T猜測。

1

你可以,但你必須與你的代碼問題的另一個一堆,像

標識預期; 'return'是一個關鍵字。

Public必須public

如果重寫這樣

class GenericTest 
{ 
    public class Child { } 
    public class X : Child { } 
    public class Y : Child { } 
    public class Z : Child { } 


    private double FindPrice<T>(T l_Price_Breaks) where T : Child 
    { 
     return 2; 
    } 

    private void foobar() 
    { 
     X MyX = new X(); 
     double retValue = FindPrice(MyX); 
    } 
} 

它編譯罰款你的代碼。