C#运算符重载不起作用

时间:2011-08-15 14:45:28

标签: c# .net visual-studio-2008

这些是我的代码:

    public static Symbol operator + (Symbol op1, Symbol op2)
    {
        Symbol op3 = new Symbol() { op3.type = Type.Value };

        object o1 = null;
        object o2 = null;

        object replacement;
        try
        {
            o1 = op1.value.Value;
            o2 = op2.value.Value;

            if (o1 is string || o2 is string)
                replacement = o1.ToString() + o2.ToString();
            else if (o1 is double && o2 is double)
                replacement = (double)o1 + (double)o2;
            else
                throw new Exception("only to be caught");
        }
        catch
        {
            op3.type = Type.Invalid;
            op3.value = null;
            replacement = op3;
        }
        Debug.WriteLine(String.Format("ExpressionEvaluator {0} + {1} = {2}", o1, o2, replacement));

        op3.value = new Naked(replacement, typeof(bool));
        return op3;
    }

我发出以下错误: 二元运算符的参数之一必须是包含类型

知道出了什么问题吗?

2 个答案:

答案 0 :(得分:6)

这意味着必须在Symbol类中声明运算符。

答案 1 :(得分:6)

根据错误,您听起来像是在operator+以外的类型中声明了Symbol。 C#要求二元运算符中列出的至少一种类型是定义二元运算符的类型

更新

正如Eric指出的那样,当声明类型是struct(名为S)时,其中一个操作数必须是SS?