繁体   English   中英

有没有办法在C#中组合“ is”和“ as” [重复]

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

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