C#中是否有办法将参数标记为可选参数,如VB.net的Optional关键字?
答案 0 :(得分:14)
将在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
}
答案 1 :(得分:13)
直到C#3.0,我担心这是不可能的,至少本身。 (见后面的帖子部分。)
随着C#4.0的出现,您可以执行以下操作:
void FooMethod(int foo, string bar = "foobar")
{
Console.WriteLine("{0}, "{1}", foo, bar);
}
任何给定默认值的参数都必须是optional arguement。
可以通过以下方式调用:
FooBar(123"); // Outputs: "123, foobar"
FooBar(123, "hello"); // Outputs: "123, hello"
FooBar(123, bar: "hello"); // Outputs: "123, hello"
在早期版本的C#中,您可以通过operator overloading实现相同的目标。
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#特别使用该功能。
答案 2 :(得分:6)
可以在.NET 4.0版本中使用。 早期版本不提供此功能。
答案 3 :(得分:1)
令人遗憾的是,直到C#4.0。 David Hayden的博客文章here详细说明了它的工作原理。
答案 4 :(得分:1)
我相信C#4.0即将推出。请参阅this来源。
现在你能做的最好的事情就是把它弄得很难和好。 :)
答案 5 :(得分:1)
您是否尝试过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" );
答案 6 :(得分:0)
不,您必须使用不同的参数创建多个对象(函数,过程)。或者更干净地创建一个对象类型作为参数传递,并在函数中使用逻辑来执行该类型的可选逻辑。
答案 7 :(得分:0)