可空类型作为C#中的函数参数

时间:2016-06-16 02:28:26

标签: c#

我在一段代码中看到了这一点,并想知道是否有人可以帮我澄清这一点。

public string MethodName(string str, int? x = null)
{
     if(x != null)
     {
          ....
     }
}

第二个函数参数是我困惑的地方:

int? x = null

我知道Nullable类型,但我对这里的语法感到困惑,我以前从未见过这个。为什么有" = null"在输入参数?我读它的方式是将x设置为null,如果因为x总是为空,它将永远不会达到第一个。

5 个答案:

答案 0 :(得分:3)

INT? x = null是默认参数或可选参数。
当你将值传递给函数时,它将是

MethodName(str,value);

x = value ;

否则:

MethodName(str);
x = null;

所以,你有两种方法来调用这个函数。使用此类型来声明方法,可选参数必须放在最后一个。

答案 1 :(得分:2)

这意味着它给出参数x是一个可选值,以防对方法的调用没有为它提供值。

您也可以对任何类型的参数执行此操作。

对MethodName方法的有效调用:

string str = "";
int? x = 1;

MethodName(str); //this will work even you only supply the string parameter;

MethodName(str, x);

答案 2 :(得分:2)

设置x的默认值。 Ints不可为空,所以

int = null 

无效。因此,如果没有?类型。

此外,可以更改此值。例如:

//x will be equal to null
MethodName("string")
//x will be equal to 5
MethodName("string", x: 5)

希望有意义

答案 3 :(得分:2)

这意味着您可以通过两种方式调用此函数:

var result = MethodName("X", 5);

var result = MethodName("X");

如果您没有通过第二个参数,它将使用默认值(在这种情况下为null)。

答案 4 :(得分:2)

方法中签名xoptional parameter,这意味着如果您不想更改参数的默认值,则可以省略此参数。 请考虑以下对此函数的调用。

使用两个参数调用1

MethodName("AValue",10); // str = AValue and x=10

致电2 :跳过可选参数

MethodName("AValue"); // str = AValue and x=null

注意: -

  

要定义可选参数,您应该为其指定默认值   该参数,如果未在函数调用中指定   将采用默认值。