0

是否可以简写下面的代码?

本质上,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;
    }
}

想要使用速记的原因是我有一堆这些条件来显示/隐藏页面的各个部分。

4

5 回答 5

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

说明:首先,TryParse()可以给出(如果解析失败null,它会设置out参数)。false其次,设置时无需if测试relatedLinks。你已经有了这个bool值,所以只需分配它。

如果您确定metaItem.Text"true""false"null,则可以进一步简化:

relatedLinks.Visible = Convert.ToBoolean(metaItem.Text);
于 2012-06-21T09:30:25.350 回答
0

如果你的评论是

metaItem.Text 来自另一个系统(CMS),因此只会有“true”或“false”。它实际上是一个转换为字符串的布尔值,因此不会有多余的空格或“true”或“false”以外的任何东西

确实如此,您可以确定输入将是字符串"true""false",然后您可以简单地编写:

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

或者

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

如果你想让调试更尴尬;)

然后根本不需要做任何布尔解析。

于 2012-06-21T09:50:56.637 回答
0

由于问题是关于速记的,所以这里有一个比肯特的略短的问题:

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

它利用了 C# 惰性求值。

这是一个更短的版本:)

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

我包含它是因为我尝试将仅在一行上使用的局部变量尽可能简单地命名 - 它使代码更易于阅读。

于 2012-11-10T18:44:16.253 回答
-1
relatedLinks.Visible = (metaItem.Text ?? "").ToUpper() == "TRUE";
于 2012-06-21T09:33:20.663 回答
-3
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks);
于 2012-06-21T09:33:36.457 回答