如何创建bool语法的副本而不使用true
和false
我会使用Enabled
和Disabled
?我希望它能像这样使用......
sBool E = Enabled;
sBool f = Disabled;
if (e || f == Disabled)
{
Do something...
}
答案 0 :(得分:2)
只需制作一个枚举
public enum sBool
{
Enabled,
Disabled
}
然后你声明你的代码将如下所示:
sBool E = sBool.Enabled;
sBool f = sBool.Disabled;
if (E == sBool.Disabled || F == sBool.Disabled)
{
//Do something...
}
编辑修复了if
语法
答案 1 :(得分:2)
这有点作弊,但你可以声明两个这样的变量:
Boolean Enabled = true;
Boolean Disabled = false;
现在你可以写下你的代码了:
Boolean sBool = Enabled;
缺点:启用和禁用没有特殊颜色..
答案 2 :(得分:1)
您可以使用枚举,如下所示:
enum Status
{
Enabled,
Disabled
}
var e = Status.Enabled;
if (e == Status.Disabled)
{
// Do something
}
我不确定您的用例是什么,但在代码可读性/可维护性方面我说使用枚举是最简单的解决方案,也是其他开发人员最容易理解的。
答案 3 :(得分:1)
如果sBool在您的项目中扮演重要角色,您可以选择实施相应的全面结构(不是枚举):< / p>
public struct sBool {
private Boolean m_Value;
public static readonly sBool Enabled = new sBool(true);
public static readonly sBool Disabled = new sBool(false);
...
private sBool(Boolean value) {
m_Value = value;
}
...
public override bool Equals(object obj) {
if (!(obj is sBool))
return false;
sBool other = (sBool) obj;
return other.m_Value == m_Value;
}
public override int GetHashCode() {
return m_Value ? 1 : 0;
}
...
public Boolean ToBoolean() {
return m_Value;
}
public static implicit operator Boolean(sBool value) {
return value.m_Value;
}
}
....
sBool e = sBool.Enabled;
sBool f = sBool.Disabled;
if (e || f == sBool.Disabled) {
...
}
答案 4 :(得分:0)
没有一个好方法可以做到这一点。 你可以利用这样一个事实,即枚举实际上只是用精美的名称进行整理,并使用按位运算符来模拟逻辑运算符。
所以:
enum Status { Disabled = 0, Enabled = 1 }
Status a = Status.Disabled;
Status b = Status.Enabled;
if( (a | b) == Status.Enabled){
//Code
}
答案 5 :(得分:0)
我只是使用bool,但是如果你真的想将逻辑封装在一个具有最可读语法的单独类中,你可以这样做:
public sealed class Status: IEquatable<Status>
{
public Status(bool isEnabled)
{
_isEnabled = isEnabled;
}
public bool IsEnabled
{
get { return _isEnabled; }
}
public bool IsDisabled
{
get { return !_isEnabled; }
}
public bool Equals(Status other)
{
return other != null && this.IsEnabled == other.IsEnabled;
}
public static implicit operator bool(Status status)
{
return status.IsEnabled;
}
public static Status Enabled
{
get { return _enabled; }
}
public static Status Disabled
{
get { return _disabled; }
}
private readonly bool _isEnabled;
private static readonly Status _enabled = new Status(true);
private static readonly Status _disabled = new Status(false);
}
然后,对于您的示例代码,请执行以下操作:
Status e = Status.Enabled;
Status f = Status.Disabled;
if (e || f.IsDisabled)
{
// ...
}
// Alternatively:
if ( e.Equals(Status.Enabled) || f.Equals(Status.Disabled) )
{
// ...
}