重载运算符时如何让对象返回?

时间:2017-03-11 19:04:24

标签: c# generics operator-overloading

我有一个名为Stat的通用类:

public class Stat<T> 
    {

        public string Name;
        public T Value;


        public Stat(string statName = "Stat")
        {
            Name = statName;
        }

        public Stat(T val)
        {
            Value = val;
        }
}

我想重载+运算符,以便我可以组合两个统计数据,并获得一个带有组合值的stat对象(和返回的stat对象的名称相同)。

我的想法是:

public static Stat<T> operator+ (Stat<T> stat1, Stat<T> stat2)

        {
            Stat<T> result = new Stat<T>();
            //result.Value = stat1.Value + stat2.Value; //<- doesnt work
            return result;

        }

但是,正如您所看到的,我无法组合两个stat对象的值。当我尝试将where子句添加到此函数时,如下所示:

public static Stat<T> operator+ (Stat<T> stat1, Stat<T> stat2)
            where T: struct, IComparable, IComparable<T>, IEquatable<T>
        {
            Stat<T> result = new Stat<T>();
            //result.Value = stat1.Value + stat2.Value; //<- doesnt work
            return result;

        }

这显然是语法错误;说“无法找到'的类型或命名空间”。

那么,我如何添加两个统计数据的值?另外,如何保持返回的对象的名称完好无损?最后一部分是我最迷失的地方。

编辑:我学会了如何获得不久前添加的统计数据的值,但保持一个完整的名称是问题。

此外,此问题与this one不重复。那个询问如何添加两个对象,导致它们的值被添加到新对象中。通过询问如何保持对象的一个​​字段相同,这个更进了一步。

0 个答案:

没有答案