MSDN的VS2010 Named and Optional Arguments (C# Programming Guide)告诉我们C#中的可选参数,显示我期望的代码:
public void ExampleMethod(int required,
string optionalstr = "default string",
int optionalint = 10)
好的,但它也说:
您也可以声明可选项 使用.NET的参数 OptionalAttribute类。 OptionalAttribute参数没有 需要一个默认值。
我阅读了MSDN's OptionalAttribute page,并在网上进行了搜索(这表明很多人声称可能不会被C#使用OptionalAttribute参数 - 我猜这些评论是在C#4之前做出的?),但我可以找不到两个问题的答案:
如果我使用OptionalAttribute将C#参数定义为可选:
答案 0 :(得分:12)
规则如下:
object
类型的参数,会传递Type.Missing
。null
。Nullable<T>
,这意味着您将获得一个等于Nullable<T>
的{{1}}个实例(HasValue
property将返回null
)请注意,对于除false
类型参数之外的所有内容,它等同于object
。
我有点意外,因为C# 4.0 specification没有说明结果会是什么,我希望它会在那里。
另外(作为indicated by Scott Rippey in the comments),这是在编译时计算的,这不是运行时操作,这意味着如果您已在已部署的其他程序集中调用此方法,并且您更改了可选值,传递给方法的默认值将 not 更改,除非您编译对程序集中的方法进行调用的所有内容。