c#中的可选参数

我在以下代码中使用可选参数。 但是显示错误“不允许使用默认参数说明符”任何人都帮助我先生。

public void getno(int pvalu, string pname = "") { } 

看起来在某些答案中存在一些错误信息:

  • 可选参数已引入C#4,因此您必须使用C#4编译器
  • 可选参数永远存在于框架中 ,因此您可以定位任何版本的框架并仍然使用它们,只要您使用C#4编译器即可。 使用C#4编译器将.NET 2作为目标是完全合理的,然后从VB8引用您的库的人仍然可以使用您的可选参数。

正如其他人所说,如果您不使用C#4或者您希望您的代码被早期的C#代码使用,则重载是使用可选参数的替代方法。 (如果使用C#4构建库,但是需要调用一些C#3代码,那么就该代码而言,这些可选参数实际上是必需的。)

(顺便说一句,我会认真重新考虑你的名字……我知道这只是示例代码,但一般来说,参数的前缀如“p”不鼓励作为惯例,同样方法通常是Pascal-cased。)

尝试重载该方法

  public void getno(int pvalu) { getno(pvalu, ""); } public void getno(int pvalu, string pname) { } 

查看方法使用指南

另请参见.Net 4 命名和可选参数(C#编程指南)

C#4.0中引入了可选参数 – 您使用的是哪个版本?

VB.NET总是有可选参数。

您始终可以使用重载和方法链来获得类似的function:

 public void getno(int pvalu) { getno(pvalue, ""); } public void getno(int pvalu, string pname) { } 

您是否正在使用.NET 4编译器(例如VS 2010)进行编译,因为只有此编译器支持C#的可选参数?

就个人而言,我会重载方法,而不是使用我正在创建的方法的可选参数,使用可选参数进行保留,以便在存在大量默认值的情况下使用API​​调用。

感谢Jon Skeet阐明了针对.NET 4和使用.NET 4编译器之间的区别。

C#中的版本4支持可选参数,请确保使用C#4编译器将项目设置为编译。