这些是我的代码:
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;
}
我发出以下错误: 二元运算符的参数之一必须是包含类型
知道出了什么问题吗?
答案 0 :(得分:6)
这意味着必须在Symbol
类中声明运算符。
答案 1 :(得分:6)
根据错误,您听起来像是在operator+
以外的类型中声明了Symbol
。 C#要求二元运算符中列出的至少一种类型是定义二元运算符的类型
更新
正如Eric指出的那样,当声明类型是struct
(名为S)时,其中一个操作数必须是S
或S?