“:=”语法的作用是什么?

6

我是一名C#开发人员,正在进行一个VB.NET项目。当我调用带有ByRef参数的函数时,VS会尝试让我使用:=符号,类似这样:

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

HydrateBookFromReader函数的签名如下:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book

为什么智能感知一直建议我使用 ":=" 结构,它的作用是什么?

3个回答

10

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

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

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


正是我在寻找的答案!谢谢。其他的回答也非常有帮助和信息量,但是它们关注问题的其他方面。 - Josh E
有点难以在谷歌上搜索标点符号。当他们在下一个版本中将其添加到C#时,它将只是冒号而没有等号。这样我们在切换语言时就能保持警觉了。 - DOK
1
我想强调的是,当处理具有许多可选参数的方法时,这尤其有用。在调用Office API时,您会发现这种情况最为常见- 有一些API具有15个可选参数,通过指定参数名称而不是省略所有位置参数更加方便(这就是为什么C#正在添加此功能的原因)。 - panopticoncentral

4
重点需要注意的是,IntelliSense并不“坚持”,它只是“建议”。在您的情况下使用它没有意义......此功能主要用于具有许多可选参数的非常长的参数列表,您只想传递其中的最后一个。当与Microsoft Office Interop一起使用时非常有用。
另外(因为您在标签中提到它):这与ByRef无关。 ByRef等效于C#中的ref和out,即它允许方法操作参数本身。

非常有见地,关键在于Intellisense会提供建议,但你仍然保持控制。 - Neil Trodden
好处是——Intellisense一直在建议它,给我带来了无尽的困扰,特别是现在知道它的用途,并且知道将其应用于单参数方法时是毫无意义的。 - Josh E
我在标签中提到ByRef的原因是,当我针对一个ByVal参数进行相同的输入时,我没有看到智能感知建议,所以我认为这与ByRef有关。 - Josh E

1

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

HydrateBookFromReader(myReader);

在未来版本的C#中,将允许使用可选参数,命名参数将允许您指定某些参数而不是其他参数,并以与声明顺序不同的顺序指定参数。 命名参数还将允许您选择性地澄清传递的参数的目的,在某些情况下使代码更易读。
在c#4.0中,命名参数对于COM互操作尤其重要,可以消除许多多余的参数。
Anders Hejlsberg在Channel 9上就C#的未来进行了精彩的讨论http://channel9.msdn.com/pdc2008/TL16/。他关于命名参数的讨论在谈话的40分45秒处。

+1 对于与 C# 4.0 的良好结合,不过它并没有完全回答原始问题。 - Josh E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接