c#中的可选参数

时间:2010-11-17 11:38:39

标签: c# c#-4.0

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

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

}

5 个答案:

答案 0 :(得分:25)

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

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

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

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

答案 1 :(得分:7)

尝试重载该方法,而不是

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

    public void getno(int pvalu, string pname)
    {

    }

查看Method Usage Guidelines

另请参阅.Net 4 Named and Optional Arguments (C# Programming Guide)

答案 2 :(得分:2)

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

VB.NET总是有可选参数。

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

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


public void getno(int pvalu, string pname)
{

}

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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