繁体   English   中英

C#速记协助

[英]C# Shorthand assistance

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

本质上metaItem.Text是一个字符串属性,其中包含“ true”或“ false”-我正在处理我无法控制的对象,因此我知道它应该是布尔值。

首先,我需要检查metaItem.Text是否包含一个值(即不是空字符串)。 如果是这样,请将其转换为布尔值。 然后将用户控件(相关链接)的Visible属性设置为该值。

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

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

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

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);

如果您的评论是

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();

如果您想使调试更尴尬;)

然后,根本不需要进行任何布尔解析。

由于该问题是关于速记的,因此这是一个比肯特短的问题:

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

它利用了C#惰性评估。

这是一个更短的版本:)

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

之所以包含它,是因为我试图保留仅在简单命名的一行上使用的局部变量-它使代码更易于阅读。

relatedLinks.Visible = (metaItem.Text ?? "").ToUpper() == "TRUE";
relatedLinks.Visible = bool.TryParse(metaItem.Text, out bShowRelatedLinks);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM