使用where限制到基类的泛型

本文关键字:基类 泛型 where 使用 | 更新日期: 2023-09-27 18:27:21

我有一个方法:

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

?我想限制为3个类X、Y、Z。这三个类来自一个名为child:的类

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的隐含转换"。

使用where限制到基类的泛型

代码对我有效,但有一个例外:您有一个名为return的变量名,它不起作用,因为这是c#中的保留关键字。将其重命名为result

你可以,但你的代码还有一堆问题,比如

应为标识符;'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);
    }
}

它编译得很好。

您缺少一些基本信息,如FindPrice的实现,但我猜您在FindPrice方法的主体中使用的是Child而不是T