C#:根据类变量将对象转换为布尔值

时间:2016-04-12 09:30:41

标签: c# object boolean compare

我的班级看起来像这样:

public class Testclass 
{
    public int myValue;
}

在另一个上下文中,我想简单地检查myValue0的值。 所以我会写:

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有没有可以测试格式及其输出的游乐场?我如何向其他用户发送私人消息?

2 个答案:

答案 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())
{}