【问题标题】:What do 2 brackets in a row mean in xaml.cs?xaml.cs 中连续 2 个括号是什么意思?
【发布时间】:2010-09-09 12:39:50
【问题描述】:

刚开始学习 C#(在 xaml 中),因此感谢您的详细说明:

((MSAvalon.Windows.Serialization.ILoaded)(_Text_2_)).DeferLoad();

不确定所有圆括号的含义...是否意味着“_Text_2_”是对象“MSAvalon.Windows.Serialization.ILoaded”的子对象?

如果是这样......为什么不只是这样:

MSAvalon.Windows.Serialization.ILoaded._Text_2.DeferLoad();

【问题讨论】:

  • ( ) 是括号,[ ] 是括号,{ } 是大括号。
  • 加深我对括号的理解... 括号如何在 C# 中工作?我应该搜索什么术语来理解 在声明新对象时有时使用
  • 被称为尖括号。它们的含义取决于上下文。它们可以被解释为不等式运算符,或作为泛型声明的一部分。在我看来,C# 的介绍很有必要……快速的 Google 搜索会找到很多资源。
  • 感谢 emddudley 的提示,我会搜索一下。我对不等式很熟悉,但它有时只在声明中使用,这是我想要理解的。

标签: c# .net silverlight xaml


【解决方案1】:

_Text_2_ 被强制转换为 MSAvalon.Windows.Serialization.ILoaded 对象/接口,然后调用 DeferLoad 方法

【讨论】:

  • 不,但这会: [((CastType)_Text_2_).DeferLoad();] 如果你用另一种方式做,你正在投射 DeferLoad() 的结果,这可能不是什么你想要的。
  • 加深我对括号的理解... 括号如何在 C# 中工作?我应该搜索什么词才能理解这一点。
  • 与泛型一起使用,指定它将接受/返回什么样的类
  • 感谢 Fredrik,在我阅读了 C# 中“泛型”和“尖括号”的含义后,您的评论更有意义。
【解决方案2】:

这是一种类型转换,用于在不明显时告诉编译器变量属于特定类型。它本来可以这样使用:

class Foo {
    private object _Text_2_;

    void Method() {
        ((MSAvalon.Windows.Serialization.ILoaded)_Text_2_).DeferLoad();
    }
}

此处省略类型转换会导致编译器错误,因为DeferLoad 不是object 的方法。您在这里告诉编译器您有一些特殊知识,_Text_2_ 确实是您所说的那样。

【讨论】:

    【解决方案3】:

    基本上都是以 (( 开头,这样就可以调用 DeferLoad 了。我用一个例子来说明。

    假设您执行以下操作。

    object s = "Hello world";
    

    s 现在包含一个字符串。如果您想使用强制转换将此字符串设为大写(如您的示例所示,我不能简单地写这个

    (string)s.ToUpper();
    

    ToUpper() 不能被调用,因为它对对象类型的变量无效。如果您将其重写为

    ((string)s).ToUpper()
    

    它是有效的。因为有括号,所以先将 s 转换为字符串,然后在变量上调用 string.ToUpper()。

    请注意,在这种情况下,(s as string).ToUpper() 将是一种更简洁的方法。

    【讨论】:

    • 为什么 '(s as string).ToUpper()' 是一种更简洁的方法?如果 s 不是字符串,您将获得 NullReferenceException 而不是 InvalidCastException。我不认为这更干净。
    • 更简洁,因为我认为代码更具可读性,因为删除了一层括号。为避免该异常,您可以使用 s.ToString().ToUpper(),但如果您只想在 s 实际上是一个字符串时这样做,您可以执行类似这样的字符串 str = s as string; if (str != null){ (s as string).ToUpper(); }
    • 该代码在我保存后看到的评论中看起来不太好,但我希望你明白了:)
    • "as" 确实适用于您希望在正常程序流程中强制转换失败的情况。 PetPaulsen 真的就在这里;您不应该仅仅使用它来保存括号,因为由此产生的 NullReferenceException 产生的关于真正问题所在的信息比使用括号得到的 InvalidCastException 更少。
    • 我必须同意 PetPaulsen 和 twon33 的观点。我不认为 N​​ullReferenceException 提供的信息比 InvalidCastException 少,所以很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    相关资源
    最近更新 更多