我发现自己多次执行以下操作
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";
编辑: 我之前应该提到这个 - 我想完全删除'if' “some operator”应该在内部执行此操作并仅在e.row.FindControl是文字时设置“.text”
答案 0 :(得分:6)
通常我不打算将它们组合起来 - 我要么使用强制转换或我要使用as
和null检查:
Literal literal = e.row.FindControl("myLiteral") as Literal;
if (literal != null)
{
literal.Text = "textData";
}
答案 1 :(得分:2)
没有内置方法可以做到这一点。但是,您可以创建一个扩展方法,为您提供此功能
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");
答案 2 :(得分:1)
as运营商已经做了。如果转换成功,则返回转换值,否则返回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";
}
答案 3 :(得分:1)
使用is
的检查通常后跟演员:
if (e.row.FindControl("myLiteral") is Literal)
{
((Literal)e.row.FindControl("myLiteral")).Text = "textData";
}
as
用作检查,将成功转换的实例或null
返回到指定的变量,然后您可以检查null
(请参阅@Jon Skeet's answer )。
答案 4 :(得分:0)
你可以这样做:
var literal = e.row.FindControl("myLiteral") as Literal;
if (literal != null)
{
literal.Text = "textData";
}
答案 5 :(得分:0)
好吧,您可以更像这样使用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");
}