这是我的代码:
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;
}
导致以下错误:二元操作符的一个形参必须是包含类型
你知道怎么回事吗?
根据错误,听起来您在Symbol
以外的类型中声明了operator+
。c#要求在二进制操作符中列出的类型中至少有一种是定义二进制操作符的类型
更新
正如Eric指出的,当声明类型是struct
(比如命名为S)时,其中一个操作数必须是S
或S?
这意味着必须在Symbol
类中声明操作符