gpt4 book ai didi

c# - 如果(实例)/自定义类上的隐式 bool 转换

转载 作者:太空狗 更新时间:2023-10-29 20:02:26 26 4
gpt4 key购买 nike

我有以下类(class):

public class InterlockedBool
{
private int _value;

public bool Value
{
get { return _value > 0; }
set { System.Threading.Interlocked.Exchange(ref _value, value ? 1 : 0); }
}

public static bool operator ==(InterlockedBool obj1, bool obj2)
{
return obj1.Value.Equals(obj2);
}
public static bool operator !=(InterlockedBool obj1, bool obj2)
{
return !obj1.Value.Equals(obj2);
}
public override bool Equals(bool obj)
{
return this.Value.Equals(obj);
}
}

我的问题是:我可以在没有 == true 的情况下检查 Value 是否为真吗?运算符覆盖有效,但我也可以像这样使用它吗?

InterlockedBool ib = new InterlockedBool();
if (ib) { }

而不是 (这有效,但通常我在 if 语句中省略 == true

if (ib == true) { }
  1. 如何在不使用 .Value = 的情况下将其分配给一个值?

谢谢你的帮助:)

最佳答案

您需要能够将您的对象转换为 bool 值

隐式转换

你的 bool 值对象:

public static implicit operator bool(InterlockedBool obj)
{
return obj.Value;
}

然后是对象的 bool 值:

public static implicit operator InterlockedBool(bool obj)
{
return new InterlockedBool(obj);
}

然后就可以测试了:

InterlockedBool test1 = true;
if (test1)
{
//Do stuff
}

显式转换

如果您希望此类的用户知道发生了转换,您可以强制进行显式转换:

public static explicit operator bool(InterlockedBool obj)
{
return obj.Value;
}

public static explicit operator InterlockedBool(bool obj)
{
return new InterlockedBool(obj);
}

然后你必须显式地转换你的对象:

InterlockedBool test1 = (InterlockedBool)true;
if ((bool)test1)
{
//Do stuff
}

编辑(由于 OP 评论)

在从 bool 值到你的对象的转换中,我调用了一个你没有提到的构造函数,下面是我将如何构建它:

public InterlockedBool(bool Value)
{
this.Value = Value;
}

因此该值的设置是保证线程安全的

关于c# - 如果(实例)/自定义类上的隐式 bool 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48788288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com