c#函数中的默认值

本文关键字:默认值 函数 | 更新日期: 2023-09-27 18:12:56

可以在c#中做到这一点吗?(在c++中不是)

function sum ( int a = 9, int b = 4){
}

,然后像这样调用函数:

int someValue = sum(, 14) // so 14 is for the second value

c#函数中的默认值

c# 4允许命名参数和可选参数1:

int Sum (int a = 9, int b = 4)
{
    return a + b;
}

:

Sum(10, 5);       // Positional arguments as "normal"
Sum(b: 5);        // Use the default value for a
Sum(a: 5);        // Use the default value for b
Sum();            // Default both parameters
Sum(b: 1, a: 10); // Arguments can be reordered

编辑:对于重载的方法,如果有多个匹配,编译器会检查这些候选方法是否因为给出默认值而有效。如果是这样的话,这些候选人实际上就被优先考虑了。这是第7.5.3.2节中列出的破接规则之一。没有只使用"更少"默认值的偏好;这是一种要么全有要么全无的方法。我在关于重载的文章中给出了一个这样的例子。


1很不幸,这个术语经常被混淆,即使是微软。形参总是有名字的——新的是你可以在调用代码中为实参指定名字。另一方面,通过指定一个默认值,可以使参数成为可选的。

使用c# 4可以实现int someValue = sum (b: 14);

编辑-按注释:

c++可以有参数的默认值…当调用方法/函数时,这些参数可以被"跳过",但是c++中的规则是,只有最右边的参数可以被跳过……这使得在c++中可以调用sum()sum (7)参考a,但不是您作为示例给出的调用…

是的,从。net 4框架开始,这可以使用可选参数

public int sum(int x = 0, int y = 0)
{
     return x + y;
}

然后调用:

int sumvalue = sum(y: 15);

重要:

可选参数定义在参数列表的末尾,在任何必需的参数之后。的参数它必须提供一系列可选参数中的任何一个前面所有可选参数的参数。逗号分隔的差距参数列表中不支持。例如,如下所示代码中,实例方法exampleemethod定义了一个必需的and两个可选参数

是的,这在c#中可以通过使用命名参数和可选参数实现。

public int Sum(int a = 1, int b = 2)
{
    return a + b;
}
Console.WriteLine(Sum(2));    // Writes 4.
Console.WriteLine(Sum());     // Writes 3.
Console.WriteLine(Sum(b: 4)); // Writes 5.

这将导致a被设置为2,b具有其默认值2。它总是按顺序填充参数,所以如果你只传递一个参数,那么只有a被设置,其余的将使用它们的默认值。

Sum(2)

这将导致a被设置为默认值1,b被设置为默认值2。因为没有提供参数

Sum()

这将导致a的默认值为1,而b被设置为4。在这种情况下,忽略参数顺序的原因是因为我们使用命名参数指定b应该设置为4。

Sum(b: 4)