C#:C#中是否有"可选"关键字或类似关键字?

Jac*_*ack 4 c#

在C#中是否有办法将参数标记为可选,如VB.net的Optional关键字?

Bra*_*don 14

将在C#4.0中

现在,您可以重载方法,设置默认值并调用其他方法.或者将其设置为可空.

public void DoSomething(int a)
{
   int defaultValue = 1;
   DoSomething(a, defaultValue);
}

public void DoSomething(int a, int b)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

要么

public void DoSomething(int a, int? b)
{
   // Check for b.HasValue and do what you need to do
}
Run Code Online (Sandbox Code Playgroud)


Nol*_*rin 13

直到C#3.0,我担心这是不可能的,至少本身.(见后面的帖子部分.)

随着C#4.0的出现,您可以执行以下操作:

void FooMethod(int foo, string bar = "foobar")
{
    Console.WriteLine("{0}, "{1}", foo, bar);
}
Run Code Online (Sandbox Code Playgroud)

给定默认值的任何参数都必须是可选的参数.

可以通过以下方式调用:

FooBar(123"); // Outputs: "123, foobar"
FooBar(123, "hello"); // Outputs: "123, hello"
FooBar(123, bar: "hello"); // Outputs: "123, hello"
Run Code Online (Sandbox Code Playgroud)

在早期版本的C#中,您可能会通过运算符重载实现相同的功能.

void FooMethod(int foo)
{
    FooMethod(foo, "foobar");
}

void FooMethod(int foo, string bar)
{
    Console.WriteLine("{0}, {1}", foo, bar);
}
Run Code Online (Sandbox Code Playgroud)

:
这里重要,不要混淆什么一直缺乏对可选参数的支持..NET框架(CLR/CIL语言)已经支持它们一段时间了(总是可能的),VB.NET语言使用它.然而,只有C#4.0,C#才能使用该功能.


Sor*_*tis 6

它可以在.NET 4.0版本中使用.早期版本不提供此功能.

  • 我很想投票,因为这在技术上是不正确的.所有版本的.NET(据我所知)都允许使用可选参数,因为CLR/CIL语言支持它们.显然,VB.NET对Optional的支持就是证据.只有在C#4.0的创建中,它们才能以*C#语言*提供.以前没有什么能阻止你在CIL/VB.NET中用可选参数编​​写方法. (6认同)
  • 打败我21s. (2认同)