编译器错误 CS0217
为了可以像短路运算符一样应用,用户定义的逻辑运算符 (“operator”) 的返回类型必须与它的两个参数的类型相同。
如果为用户定义的类型定义运算符,然后尝试将运算符用作短路运算符,则用户定义的运算符必须具有类型相同的参数和返回值。 有关短路运算符的详细信息,请参阅 &&
运算符和 ||
运算符。 有关用户定义的短路或条件操作符的详细信息,请参阅 C# 语言规范的用户定义条件逻辑运算符部分。
以下示例生成CS0217:
// CS0217.cs
using System;
public class MyClass
{
public static bool operator true (MyClass f)
{
return false;
}
public static bool operator false (MyClass f)
{
return false;
}
public static implicit operator int(MyClass x)
{
return 0;
}
public static int operator & (MyClass f1, MyClass f2) // CS0217
// try the following line instead
// public static MyClass operator & (MyClass f1, MyClass f2)
{
return new MyClass();
}
public static void Main()
{
MyClass f = new MyClass();
int i = f && f;
}
}