2012-06-21 89 views
0

可以簡寫下面的代碼嗎?C#速記幫助

本質上metaItem.Text是一個字符串屬性,它包含「true」或「false」 - 我正在處理對象,我在這裏沒有控制權,所以我知道它應該是一個布爾值。

首先,我需要檢查metaItem.Text是否包含一個值(即不是空字符串)。如果是這樣,請將其轉換爲布爾值。然後將用戶控件(relatedLinks)的Visible屬性設置爲該值。

if (metaItem.Text != string.Empty) 
{ 
    bool bShowRelatedLinks = false; 
    bool.TryParse(metaItem.Text, out bShowRelatedLinks); 

    if (bShowRelatedLinks) 
    { 
     relatedLinks.Visible = true; 
    } 
    else 
    { 
     relatedLinks.Visible = false; 
    } 
} 

想要使用速記的原因是,我有一堆條件來顯示/隱藏頁面的各個部分。

+1

metaItem.Text!= string。空從根本上是有缺陷的。也檢查像SPACE這樣的愚蠢條目。所有的投入都應該被消毒,15年左右,我TRIM所有的投入 - 人們喜歡在開始或結束時增加空間而沒有意識,主要是因爲他們沒有真正看到它們。 – TomTom

+0

metaItem.Text出自另一個系統(CMS),所以只會有「真」或「假」。它實際上是一個布爾轉換爲一個字符串,所以不會有額外的空間或除「true」或「false」以外的其他任何東西 –

+0

正如@TomTom指出的有關'metaItem.Text!= string.Empty'嘗試使用' !'string.IsNullOrEmpty(metaItem.Text.Trim())' – dtsg

回答

2
bool bShowRelatedLinks = false; 
bool.TryParse(metaItem.Text, out bShowRelatedLinks); 
relatedLinks.Visible = bShowRelatedLinks; 

說明:首先,TryParse()可以給出null(它將着手out參數false如果解析失敗)。其次,在設置relatedLinks時,不需要進行if測試。您已經擁有bool值,因此只需指定該值即可。

如果你確信metaItem.Text"true""false",或null,可以進一步簡化:

relatedLinks.Visible = Convert.ToBoolean(metaItem.Text); 
+0

注意空串,'Convert.ToBoolean()'不會喜歡它們 – paul

+0

@paul:這就是爲什麼我說如果他確定它是真的,假的,或null。 –

+0

是的,你的作品爲真,假,空,我的作品爲真,假,空 – paul

-1
relatedLinks.Visible = (metaItem.Text ?? "").ToUpper() == "TRUE"; 
+0

失敗,如果'metaItem.Text'爲'null',他正在檢查他的原碼。 –

+0

不,他正在檢查空字符串,這與空值不一致 – paul

+0

增加了空值 – paul

-3
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks); 
+1

如果轉換成功,TryParse將返回true,因此當代碼將metaItem.Text '是'true'或'false' – paul

+0

問題是'速記',而不是編碼他的邏輯。所以我提出了一個想法,而不是全功能的邏輯。 –

0

如果您的評論是

metaItem.Text來自另一個系統(CMS),所以只會有 「tru e「或」false「。這簡直是​​一個布爾值轉換爲字符串,所以 不會有多餘的空格或任何東西比「真」或「假」等

真的是這樣,你可以肯定的是,投入將是字符串"true""false",那麼你可以簡單地寫:

var showRelatedLinks = metaItem.Text == bool.TrueString.ToLower(); 
relatedLinks.Visible = showRelatedLinks 

relatedLinks.Visible = metaItem.Text == bool.TrueString.ToLower(); 

,如果你想使調試更加尷尬;)

然後根本不需要做任何bool解析。

0

由於問題是關於速記,這裏是一個比肯特的稍短:

bool bShowRelatedLinks; 
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks) && bShowRelatedLinks; 

它採用C#懶惰評價的優勢。

這裏是一個更短的版本:)

bool b; 
relatedLinks.Visible = bool.TryParse(metaItem.Text, out b) && b; 

我把它,因爲我儘量保持在唯一一個名爲儘可能簡單地線使用的局部變量 - 它使代碼更易於閱讀。