我的班级看起来像这样:
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-04-13]:
像丹尼斯写的那样,我正在使用
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
编译器无法知道它是否应该使用布尔值或UInt64运算符。
所以我写了
if ((UInt64)x != (UInt64)y)
但是那两个类型的演员都是灰色的。
@ƉiamondǤeezeƦ:感谢您重新格式化和编辑。但我觉得现在我说对了吗?
问候沃尔夫冈
BT有没有可以测试格式及其输出的游乐场?我如何向其他用户发送私人消息?答案 0 :(得分:2)
为TestClass
定义隐式强制转换运算符:
class TestClass
{
public int myValue;
public static implicit operator bool(TestClass value)
{
// assuming, that 1 is true;
// somehow this method should deal with value == null case
return value != null && value.myValue == 1;
}
}
还要考虑将TestClass
从类转换为结构(请参阅this参考)。如果您决定转换它,请避免使用可变结构。
答案 1 :(得分:0)
您可以使用扩展方法来实现您不仅可以在此类Testclass
中使用的方法 public static class IntExtension
{
public static bool IsBool(this int number)
{
bool result = true;
if (number == 0)
{
result = false;
}
return result;
}
}
然后哟可以
if ((ac.AMethod()).IsBool())
{}