如何跳过C#中的可选参数?

如何跳过C#中的可选参数?,c#,optional-parameters,C#,Optional Parameters,例如: public int foo(int x, int optionalY = 1, int optionalZ = 2) { ... } 我想这样称呼它: int returnVal = foo(5,,8); int returnVal = foo(5, optionalZ: 8); 换句话说,我想提供x和z,但我想使用Y的默认值,可选Y=1。 Visual Studio不喜欢, 请提供帮助。在C#4.0中,您可以在跳过默认值后命名参数,如下所示: int returnVal =

例如:

public int foo(int x, int optionalY = 1, int optionalZ = 2) { ... }
我想这样称呼它:

int returnVal = foo(5,,8); 
int returnVal = foo(5, optionalZ: 8);
换句话说,我想提供
x
z
,但我想使用
Y
的默认值,
可选Y=1。

Visual Studio不喜欢

请提供帮助。

在C#4.0中,您可以在跳过默认值后命名参数,如下所示:

int returnVal = foo(5,,8); 
int returnVal = foo(5, optionalZ: 8);
这被称为。其他几种语言提供此功能,通常使用语法
foo(5,optionalZ=8)
,这在阅读其他语言的代码时非常有用。

如果这是C#4.0,则可以使用命名参数功能:


有关更多信息,请参阅。

提供所选参数的另一种动态方法是在类中实现方法,并向类构造函数提供命名参数。为什么不在这里提到的同一行代码中添加对方法的调用:

var p=newpersoninfo{Name=“Peter”,Age=15}.BuildPerson()


这是一个迟来的回答,但对于那些进入这个领域的人来说。 也可以使用重载,即使用与方法/函数相同的名称,但使用不同的参数集

ea


这个模式相当于使用intellicense我们可以浏览各种函数。

@Ardman:如果OP开始使用可选参数,那么他必须使用C#4:)作为记录,我认为将它们命名为参数更准确。参数总是有名字的@Jon我同意这会更有意义,但是为什么每个人(包括@Josiah和我提供的链接)都使用命名参数这个术语呢?使用谷歌作为比较,“命名参数”返回的结果是“命名参数”返回的结果的两倍(使用引号)。@marcog-@marcog:不是每个人都这样:)很多人这样做,因为一些有影响力的作家无疑早就这样做了。这并不意味着跟随他们的领导是正确的。特别是,规范使用了术语“命名参数”-参见第7.5.1节。不要混淆C#4语言和C#4编译器。只要使用c#4编译器编译,就可以针对.NET3.5使用可选参数