我是一名从事VB.NET项目的C#开发人员,当我调用带有ByRef参数的函数时,VS一直试图让我使用:= thingie:
While reader.Read()
HydrateBookFromReader(reader:=???)
HydrateBookFromReader函数具有以下签名:
Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book
为什么intellisense一直坚持我使用它:=构造,它的用途是什么?
答案 0 :(得分:10)
在VB中,:=用于指定命名参数。
Contact(Address:="2020 Palm Ave", Name:="Peter Evans")
这对于指定可选参数特别有用。
答案 1 :(得分:4)
为什么intellisense一直坚持我使用它:=构造,它的用途是什么?
重要的是要注意IntelliSense不坚持,它提议。在你的情况下使用它是没有意义的...这个功能主要用于很长的参数列表,有许多可选参数,你只想通过,比如最后一个。在使用Microsoft Office Interop时非常有用。
另外(因为你在标签中提到它):这与ByRef
无关。 ByRef
相当于C#中的ref
和out
,即它允许该方法操纵参数本身。
答案 2 :(得分:1)
Intellisense可能会建议:=语法,但我怀疑它会在没有它的情况下编译。
HydrateBookFromReader(myReader);
在允许使用可选参数的C#的未来版本中,命名参数将允许您指定一些参数而不指定其他参数,并以与声明的顺序不同的顺序指定参数。命名参数还允许您有选择地阐明传入参数的目的,使代码在某些情况下更具可读性。
在COM Interop的c#4.0中,命名参数尤为重要,可以消除许多多余的参数。
Anders Hejlsberg在http://channel9.msdn.com/pdc2008/TL16/对第9频道的C#的未来进行了精彩的讨论。他关于命名参数的讨论是在谈话的40分45秒。