2011-06-24 32 views
0

下面是一些示例代碼開始:如何簡化爲空的布爾值的使用在C#

class Foo 
{ 
    public bool? IsValid { get; set; } 
} 

// later in some other function... 
void DoStuff(Foo myFoo) 
{ 
    myControlState.Visible = myFoo.IsValid.HasValue ? myFoo.IsValid.Value : false; 
} 

我碰到很多的,我必須使用三元運算符像上面正確使用可爲空的情況下,布爾。如果在不拋出異常的情況下獲得bool值的方法稍微簡單一些,那將會很好。上面的代碼看起來很簡單,但有很多複雜的情況,最終代碼很多。我希望做一些簡單的事情,例如:

myControlState.Visible = GetNullableValue<bool>(myFoo); 

有沒有人有任何更清潔的三元運算符的替代品?

+0

真正的解決方案是從不使用可空,但由於某些原因API可以。我從來不明白爲什麼我會想要一個有3個選項的布爾... – alternative

+0

@monadic:我的例子不在上下文中,所以自然沒有任何意義。在我的真實代碼中,我正在處理SQL服務器中的可空字段,並將其映射到類中的某個屬性,所以對我來說,擁有三值布爾值當然很重要。 –

回答

7

如果這使得它更具可讀性,則可以使用null-coalescing operator

myControlState.Visible = myFoo.IsValid ?? false; 
+0

令人驚歎。謝謝。出於好奇,你怎麼發音「凝聚」? –

+2

@RobertDailey與別人合作 – Jonathan

1

這是更優雅

myControlState.Visible = myFoo.IsValid ?? false; 
+0

很確定@Bala剛纔說了這個 –

1
myControlState.Visible = myFoo.IsValid.GetValueOrDefault(); 
0

如果您是從SQL服務器讀取位值,並要檢查對空的錯誤,使用下面的擴展方法對數據行

public static T GetValueOrDefault<T>(this DataRow row, string key) 
{ 
    return row.GetValueOrDefault(key, default(T)); 
} 

以及當你從SQL服務器讀取數據時放入。

Boolean IsVisible = GetValueOrDefault<string>("FieldName");