我可以在C#函数中为参数或可选参数赋予默认值吗?

时间:2010-10-12 12:51:08

标签: c#

我可以在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);

6 个答案:

答案 0 :(得分:66)

这正是您在C#中的表现,但该功能最初是在.NET 4.0中添加的

答案 1 :(得分:37)

是。见Named and Optional Arguments。请注意,默认值必须是常量,所以这没关系:

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

但这不是:

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

答案 2 :(得分:26)

只能从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)。

答案 3 :(得分:5)

是的,但您需要使用.NET 3.5和C#4.0才能获得此功能。

This MSDN page有更多信息。

答案 4 :(得分:1)

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

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

This MSDN page提供了有关VS 2010中可选参数的更多信息。

答案 5 :(得分:0)

这是C#4.0的一个功能,但在该版本之前不使用函数重载是不可能的。