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

时间:2009-07-21 19:58:22

标签: c#

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

8 个答案:

答案 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)

是的,在那之前你一直处于超负荷状态。