在C#中是否有类似于VB.net的Optional关键字来标记参数为可选的方式?
C# 4.0 中会有这个功能。
目前你可以通过重载方法、设置默认值并调用其他方法,或将其设置为可空来实现。
public void DoSomething(int a)
{
int defaultValue = 1;
DoSomething(a, defaultValue);
}
public void DoSomething(int a, int b)
{
// Do something
}
或者public void DoSomething(int a, int? b)
{
// Check for b.HasValue and do what you need to do
}
在C# 3.0之前,恐怕这是不可能的,至少就其本身而言是如此。 (请参见后面的部分。)
随着C# 4.0的出现,您可以执行以下操作:
void FooMethod(int foo, string bar = "foobar")
{
Console.WriteLine("{0}, "{1}", foo, bar);
}
FooBar(123"); // Outputs: "123, foobar"
FooBar(123, "hello"); // Outputs: "123, hello"
FooBar(123, bar: "hello"); // Outputs: "123, hello"
在早期版本的C#中,您可以通过运算符重载来实现相同的效果。
void FooMethod(int foo)
{
FooMethod(foo, "foobar");
}
void FooMethod(int foo, string bar)
{
Console.WriteLine("{0}, {1}", foo, bar);
}
注意:
这里很重要的一点是不要混淆哪些缺少对可选参数支持。.NET框架(CLR/CIL语言)已经支持了一段时间(可能一直都有),而VB.NET语言也在使用它。然而,只有在C# 4.0中,C#才特别地使用了这个特性。
你尝试过使用 params 修改符吗?
public void Foo( int i, double d, param string[] values )
{
foreach( String s in values )
Bar(s);
}
private Bar( String s )
{
//do something
}
对于这个定义,以下所有调用都是合法的:
Foo( 1, 3.14 )
Foo( 2, 1.6128 )
Foo( 3, 3.14, "This", "is", "a", "test" );
是的,到那时你就只能使用重载了。