我的课程大概长这样:
public class Testclass
{
public int myValue;
}
在另一个情境下,我想要简单地将
myValue
的值与 0
进行比较。那么我会写如下代码:Testclass tc = new Testclass();
tc.myValue = 13;
if (tc.myValue == 0)
{
}
如何简化这个过程,使得
Testclass
对象知道当它与布尔值进行比较时(或用作布尔值)应该怎么做呢?可以这样写:Testclass tc = new Testclass();
tc.myValue = 13;
if (tc)
{
}
更准确地说,
Testclass
将是包含在库中另一个方法的结果,因此代码看起来像这样:anotherClass ac =new anotherClass();
// if (ac.AMethod().myValue == 0)
// should be
if (ac.AMethod())
{
}
方法AMethod
的样子如下:
public Testclass AMethod()
{
return new Testclass();
}
[2016年4月13日更新]:
正如Dennis所写,我正在使用
public static implicit operator bool(TestClass value)
获取我的类的“布尔值”。为了更加精确并且与实际应用更贴切,我想将签名修改为
public static implicit operator UInt64(FlexComDotNetFehler fehler)
public static implicit operator Boolean(FlexComDotNetFehler fehler)
所以,这两种类FlexComDotNetFehler
的方法在第一种情况下返回内部的UInt64字段作为实际的UInt64
表示,而在第二种情况下返回一个Boolean
值,当UInt64
值大于0时为真。
但是现在,当我编写代码时
FlexComDotNetFehler x;
FlexComDotNetFehler y;
if (x == y)
此处的x和y均为类型FlexComDotNetFehler
编译器无法确定应该使用Boolean还是UInt64运算符。
因此,我编写了以下代码:
if ((UInt64)x != (UInt64)y)
但是这两个类型转换被禁用了。
@Ɖiamond ǤeezeƦ:感谢您的重新格式化和编辑。但我认为现在我弄对了?
问候Wolfgang
顺便说一下,有没有可以测试格式和输出的游乐场?如何向其他用户发送私人消息?
AMethod
返回null
,则操作符将在没有进行空值检查的情况下抛出 NRE。您可以轻松测试它。 - Dennis