[英]Is there are way to combine “is” and “as” in C# [duplicate]
可能重复:
C#-在if语句中赋值
我发现自己在接下来的多次中
if (e.row.FindControl("myLiteral") is Literal)
{
(e.row.FindControl("myLiteral") as Literal).Text = "textData";
}
有没有办法替换“ if”部分并简化设置程序:
(e.row.FindControl("myLiteral") <some operator that combines is and as> .text = "textData";
编辑:我之前应该提到过这一点-我想完全删除“如果”。
仅当e.row.FindControl是文字时,“某些运算符”才应在内部执行此操作并设置“ .text”
通常我不会将它们合并一样,先从-我要么使用浇注或者我会用as
和空校验:
Literal literal = e.row.FindControl("myLiteral") as Literal;
if (literal != null)
{
literal.Text = "textData";
}
没有内置的方法可以做到这一点。 但是,您可以编写扩展方法来提供此功能
public static void AsType<T>(object o, Action<T> action) where T : class
{
var value = o as T;
if (value != null)
{
action(value);
}
}
然后你可以写
e.row.FindControl("myLiteral").AsType<Literal>(l => l.Text = "textData");
as运算符已经做了一个is。 如果转换成功,则返回转换值,否则返回null。
Literal lit = e.row.FindControl("myLiteral") as Literal;
if (lit != null)
{
lit.Text = "textData";
}
要么
if (e.row.FindControl("myLiteral") is Literal)
{
Literal lit = (Literal)e.row.FindControl("myLiteral");
lit.Text = "textData";
}
使用支票is
之后通常是铸造:
if (e.row.FindControl("myLiteral") is Literal)
{
((Literal)e.row.FindControl("myLiteral")).Text = "textData";
}
而as
这种检查的功能,它可以将成功的转换实例或null
返回给分配的变量,然后您可以检查其是否为null
(请参阅@Jon Skeet的答案 )。
您可以这样做:
var literal = e.row.FindControl("myLiteral") as Literal;
if (literal != null)
{
literal.Text = "textData";
}
嗯,你可以使用as
更喜欢这个(标准使用):
Literal lit = e.row.FindControl("myLiteral") as Literal;
if (lit != null) {
lit.Text = "textData";
}
如果您使用的是.Net 3.5或更高版本,则可以创建扩展方法来处理此问题(种类如下):
internal static class Extensions {
internal static void SetTextLiteral(this Control c, string text) {
Literal lit = c as Literal;
if (lit != null)
lit.Text = text;
}
}
void Sample() {
e.row.FindControl("myLiteral").SetTextLiteral("textData");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.