在基类中将属性设置为泛型并尝试在派生类中重写时出现类型不匹配错误

时间:2019-01-28 08:32:54

标签: c# generics

我有一个像下面这样的基类,它计算2种不同类型的一些统计信息:

public abstract class BaseStatsCalculator<T>
    {
        public abstract T First { get; }
        public abstract T Second { get; }
        public abstract T ValueDiff { get; protected set; }
        public abstract T MatchingPercentage { get;}
    }

现在我有 2种类型,它们将以自己的方式操纵上述属性的值。

对于 Type1 ,我知道以下属性将始终适用于int datatype

public abstract T First { get; }
public abstract T Second { get; }
public abstract T ValueDiff { get; protected set; }

我在计算MatchingPercentage属性时遇到问题,因为它将基于公式进行计算,并且四舍五入将基于用户为最终位置选择的配置。

public class Type1 : BaseStatsCalculator<int>
    {
        public override double MatchingPercentage
        {
            get {
                double a = (Second - ValueDiff) * 100;
                double b = Second;
                double matchingPercentage = 00.00;
                if (b > 0)
                    matchingPercentage = Math.Round(((double)a / b), this._decimalPlaces);
            }
        }
   }

类型2具有以下公式来计算MatchingPercentage:

public class Type1 : BaseStatsCalculator<Decimal>
    {
       public override decimal MatchingPercentage
        {
            get {
                decimal matchPer = 0;
                if (Second > 0 || First > 0)
                matchPer = ((Math.Min(Second,First) / Math.Max(Second,First)) * 100);
                return (TruncateDecimal(matchPer, this.decimalPlaces))
            }
        }

        public decimal TruncateDecimal(decimal value, int precision)
        {
            decimal step = (decimal)Math.Pow(10, precision);
            decimal tmp = Math.Truncate(step * value);
            return tmp / step;
        }
}

所以对于类型2,我认为我没有问题,但是对于类型1,我在这里面临问题:

公共优先级double MatchingPercentage     {     }

错误: It should work with int

有人可以指导我如何解决这个问题吗?

0 个答案:

没有答案