【问题标题】:What is the use of the := syntax?:= 语法有什么用?
【发布时间】:2009-05-23 20:06:05
【问题描述】:

我是一名从事 VB.NET 项目的 C# 开发人员,当我调用带有 ByRef 参数的函数时,VS 一直试图让我使用 := 事物,如下所示:

While reader.Read()
HydrateBookFromReader(reader:=???)

HydrateBookFromReader 函数具有以下签名:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book

为什么智能感知一直坚持我使用 := 构造,它是做什么用的?

【问题讨论】:

    标签: vb.net syntax function language-features byref


    【解决方案1】:

    在 VB 中,:= 用于指定命名参数。

    Contact(Address:="2020 Palm Ave", Name:="Peter Evans")
    

    这对于指定可选参数特别有用。

    【讨论】:

    • 正是我正在寻找的答案!谢谢。其他答案也非常有帮助且内容丰富,但重点关注问题的其他方面
    • 嗯。谷歌标点符号有点难。当他们在下一个版本中将它添加到 C# 时,它只是没有等号的冒号。只是为了让我们在切换语言时保持警惕。
    • 我想补充一点,这在处理具有大量可选参数的方法时特别有用。您在调用 Office API 时会看到这一点——有些 API 有 15 个可选参数,通过名称指定参数比省略所有位置参数要方便得多。 (这就是 C# 添加该功能的原因。)
    【解决方案2】:

    为什么智能感知一直坚持我使用 := 构造,它是做什么用的?

    请务必注意,IntelliSense 并非坚持,而是建议。在您的情况下使用它没有意义……此功能主要用于带有许多可选参数的非常长的参数列表,您只想传递其中的最后一个参数。它在使用 Microsoft Office Interop 时很有用。

    另外(因为您在标签中提到它):这与ByRef 无关。 ByRef 等价于 C# 中的 refout,即它允许方法自己操作参数。

    【讨论】:

    • 非常有见地,这里的关键是智能感知可以提出建议,但您仍然保留控制权。
    • 优点 -- Intellisense 一直坚持提出它,给我带来了无穷无尽的烦恼,尤其是现在知道它的用途,并且知道它在应用于单参数时是荒谬的方法
    • 我在标签中提到 ByRef 的原因是,当我对 ByVal 参数进行相同的输入时,我没有看到智能感知建议,所以我认为它与 ByRef 有关
    【解决方案3】:

    Intellisense 可能建议使用 := 语法,但我怀疑没有它也可以编译。

    HydrateBookFromReader(myReader);
    

    在允许可选参数的未来 C# 版本中,命名参数将允许您指定一些参数但不能指定其他参数,并以与声明它们不同的顺序指定参数。命名参数还允许您有选择地阐明传入参数的用途,从而在某些情况下使代码更具可读性。

    命名参数在 C# 4.0 中对于 COM Interop 尤其重要,其中可以消除许多多余的参数。

    Anders Hejlsberg 在第 9 频道 http://channel9.msdn.com/pdc2008/TL16/ 上就 C# 的未来进行了精彩的讨论。他关于命名参数的讨论出现在演讲的第 40 分 45 秒时。

    【讨论】:

    • +1 与 C# 4.0 的良好搭配,但它并没有完全解决原始问题。
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多