是否有办法在C#中结合“是”和“作为”

时间:2011-09-19 21:58:42

标签: c#

  

可能重复:
  C# - Assignment in an if statement

我发现自己多次执行以下操作

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”

6 个答案:

答案 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");
}