通用返回的解决方法

时间:2012-01-02 10:01:02

标签: c# generics

我有以下课程

public abstract class Rule
    {
        protected Rule()
        {
            Nodes = new List<Node>();
        }
        public List<Node> Nodes { get; private set; }
        public int NumberOfElements { get; set; }

        public abstract Result<Rule> Validate(IEnumerable<Node> validUnits);

    }

现在,我也有:

public class MinNumberOfCredits : Rule
{

   public override string ToString()
    {
        return string.Format(NumberOfElements);
    }

    public override Result<Rule> Validate(IEnumerable<Node> validUnits)
    {
        var totalCredits = validUnits.Sum(x => x.Credits);
        return NumberOfElements > totalCredits ? new Result<MinNumberOfCredits>(ResultMessage.Fail, NumberOfElements) : new Result<MinNumberOfCredits>();
    }
}

问题是我的返回类型是Result<Rule>但在特定类中我必须返回Result<MinNumberOfCredits>

1 个答案:

答案 0 :(得分:2)

在C#中,你不能拥有相同名称和参数但返回类型不同的方法,所以你想到的只是不起作用。有各种可能的方法来解决您的问题,但它们取决于您的确切用例:

  • Rule设为通用类型Rule<T>,并将Validate的返回类型更改为Result<T>
  • Result<Rule>Result<MinNumberOfCredits>的共性提取到界面中并返回该界面。
  • ...

我知道所有这些解决方案都需要进一步修改。我只想给你一个方向。