2012-03-11 48 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); 
    } 
} 

它编译罚款你的代码。