是否可以为C#函数中的参数或可选参数提供默认值?


77

我可以在C#中提供默认参数吗?

在C中:

void fun(int i = 1)
{
    printf("%d", i);
}

我们可以给参数一个默认值吗?在C#中可以吗?如果是这样,我们可以避免函数重载吗?

在现有函数中添加可选参数始终是一种不好的做法。如果您正在处理的项目必须引用具有函数的类,而我们使用可选值更改了参数,则可能会抛出运行时异常,即找不到该方法。

这是因为我们认为如果添加一个额外的可选值,则在许多地方使用该函数都无需更改代码。

function Add(int a, int b);

这将通过以下方式调用:

Add(10, 10);

但是,如果我们添加这样的可选参数,

function Add(int a, int b, int c = 0);

然后编译器期望

Add(10, 10, 0);

实际上,我们这样调用,Add(10, 10)而该函数在该类中不可用,并导致运行时异常。

这是在将新参数添加到函数中而被很多地方调用的同时发生的,我不确定每次都会发生这种情况。但我建议您重载该功能。

我们总是需要重载具有可选参数的方法。同样,如果您正在使用具有多个可选参数的函数,则最好使用参数名称传递值。

function Add(int a, int b, int c = 0);

使用以下方式调用此函数总是好的。

Add(10, 20, c:30);

1
@Vyas现在可以使用C#4.0
kbvishnu 2011年


@nawfal它问了很久,在使用可选参数时遇到了一些问题。所以我更新了问题。
kbvishnu

1
@VeeKayBee没错,但是您在编辑中是否有疑问?如果要提出这一点,为什么不在相关主题中回答呢?
2013年

@nawfal感谢您的建议。我将更新为答案
kbvishnu

Answers:



44

是。请参阅命名参数和可选参数。请注意,默认值必须为常数,因此可以:

public string Foo(string myParam = "default value") // constant, OK
{
}

但这不是:

public void Bar(string myParam = Foo()) // not a constant, not OK
{
}

27

从C#4.0开始

但是,当使用4.0之前的C#版本时,可以通过使用重载方法来解决此问题:

public void Func( int i, int j )
{
    Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j));
}

public void Func( int i )
{
    Func (i, 4);
}

public void Func ()
{
    Func (5);
}

(或者,您可以升级到C#4.0 offcourse)。



1

此功能可从C#4.0获得-它是Visual Studio 2010中引入的。您可以在.NET 3.5的项目中使用它。因此,无需将.NET 3.5中的旧项目升级到.NET 4.0。

您只需要使用Visual Studio 2010,但请记住,它应该编译为默认语言版本(在项目Properties-> Buid-> Advanced ...中进行设置)。

这个MSDN页面包含有关VS 2010中可选参数的更多信息。


0

这是C#4.0的功能,但是如果不使用该版本之前的函数重载就无法实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.