如何創建bool語法的副本,並且不使用true
和false
我會使用Enabled
和Disabled
?我想它要使用像這樣...創建自定義布爾值?
sBool E = Enabled;
sBool f = Disabled;
if (e || f == Disabled)
{
Do something...
}
如何創建bool語法的副本,並且不使用true
和false
我會使用Enabled
和Disabled
?我想它要使用像這樣...創建自定義布爾值?
sBool E = Enabled;
sBool f = Disabled;
if (e || f == Disabled)
{
Do something...
}
只是要一個枚舉這樣
public enum sBool
{
Enabled,
Disabled
}
然後你宣佈你的代碼看起來就像這樣:
sBool E = sBool.Enabled;
sBool f = sBool.Disabled;
if (E == sBool.Disabled || F == sBool.Disabled)
{
//Do something...
}
編輯:修復if
語法
這不起作用。它需要從int到bool的隱式轉換。 –
有什麼方法可以知道如何刪除sBool前綴?所以它只會是「==禁用」? –
除了'if'結構中的語法之外,我不知道爲什麼這不會起作用@ xen-0。丹尼爾,我不認爲有什麼辦法,爲什麼你要那樣呢? –
你可以ü瑟枚舉,就像這樣:
enum Status
{
Enabled,
Disabled
}
var e = Status.Enabled;
if (e == Status.Disabled)
{
// Do something
}
我不知道你的使用情況是什麼,但在代碼的可讀性/可維護性方面我會說使用枚舉是最簡單的解決方案,最簡單其他開發商理解。
有什麼方法可以知道如何刪除狀態前綴?所以它只會是「==禁用」? –
你總是可以創建自己的類來覆蓋相等運算符。我會爲此舉出一個例子。編輯:看起來像有人已經做到了。 – Castrohenge
有沒有一種真正的好方法來做到這一點。 您可以利用這樣的事實,即枚舉實際上只是帶有奇特名稱的整數,並使用按位運算符來模擬邏輯運算符。
所以:
enum Status { Disabled = 0, Enabled = 1 }
Status a = Status.Disabled;
Status b = Status.Enabled;
if((a | b) == Status.Enabled){
//Code
}
這是一個小騙子,但你可以在兩個變量這樣的聲明:
Boolean sBool = Enabled;
:
Boolean Enabled = true;
Boolean Disabled = false;
現在你可以在你的代碼編寫缺點:啓用和禁用沒有特殊顏色..
如果sBool起着項目中的顯著作用,您可以選擇實施造成相應的滿量程結構(不枚舉):
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) {
...
}
如果可能,我需要再次刪除sBool前綴,例如「'== Disabled」 –
我只用一個布爾值,但如果你真的想封裝邏輯在一個單獨的類最可讀的語法可能,你可以做這樣的事情:
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))
{
// ...
}
[True,False,FileNotFound](http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx)? –