2012-06-21 78 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; 

我把它,因为我尽量保持在唯一一个名为尽可能简单地线使用的局部变量 - 它使代码更易于阅读。