[英]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.