我正在读一本 C# 书籍,正在阅读命名参数和可选参数一章。我读过一个项目符号,上面写着:
“如果存在多个可选参数并且指定了一个值
一,所有前面的可选参数也必须提供值”
您能给我一个例子吗,因为我无法从代码中重现上述语句。
以此方法签名为例:
public void MyMethod(object arg1, string arg2 = null, int? arg3 = null, MyType arg4 = null)
{
// do stuff
}
您不能调用此方法并且只能提供值arg1
and arg3
, like:
MyMethod(obj, 5);
您还必须填写之间的论点。原因是编译器不知道您指的是第三个参数。所以它实际上会尝试将值放入第一个可选参数中,作为string
。第三个参数不是字符串而是可以为空的int
,所以你会得到一个编译错误。
但是,从 C# 4 开始,您还可以执行以下操作:
MyMethod(obj, arg3: 5);
这些称为命名参数。看到这个MSDN 文章了解更多相关信息。在这种情况下,编译器仍然可以确保类型安全,因为它知道您要为其提供值的参数。
edit:正如其他人指出的那样,方法声明中参数的顺序也很重要。所有可选参数必须位于末尾。然而,这并不是问题真正要问的。问题指出“指定值”,您可以在调用该方法时执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)