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

Ian*_*vis 39 c# optional-parameters

例:

public int foo(int x, int optionalY = 1, int optionalZ = 2) { ... }
Run Code Online (Sandbox Code Playgroud)

我想这样称呼它:

int returnVal = foo(5,,8); 
Run Code Online (Sandbox Code Playgroud)

换句话说,我想提供xz,但我想使用默认值Y,optionalY = 1.

Visual Studio不喜欢 ,,

请帮忙.

Jos*_*ell 63

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

foo(x: 5, optionalZ: 8); 
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此博客.

  • 为了记录,我认为将它们命名为*arguments*会更准确.参数有*总是*有名字! (4认同)
  • @marcog - http://stackoverflow.com/questions/306085/shouldnt-c-4-0s-new-named-parameters-feature-be-called-named-arguments (2认同)
  • 不要混淆C#4语言和C#4编译器.只要使用c#4编译器进行编译,就可以定位.net 3.5并仍使用可选参数 (2认同)

mar*_*cog 17

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

int returnVal = foo(5, optionalZ: 8);
Run Code Online (Sandbox Code Playgroud)

这称为命名参数.其他几种语言提供了这一功能,并且通常使用语法foo(5, optionalZ=8)来代替它们,这对于了解何时阅读其他语言的代码很有用.

  • @Ardman:如果OP使用可选参数开头,他必须使用C#4 :) (3认同)