lan*_*nce 16 c# default-value optional-parameters
MSDN的VS2010 命名和可选参数(C#编程指南)告诉我们C#中的可选参数,显示我期望的代码:
public void ExampleMethod(int required,
string optionalstr = "default string",
int optionalint = 10)
Run Code Online (Sandbox Code Playgroud)
好的,但它也说:
您还可以使用.NET OptionalAttribute类声明可选参数.OptionalAttribute参数不需要默认值.
我阅读了MSDN的OptionalAttribute页面,并在线完成了搜索(显示很多人声称OptionalAttribute参数不能被C#使用 - 我猜这些评论是在C#4之前做出的?),但我找不到答案两个问题:
如果我使用OptionalAttribute将C#参数定义为可选:
cas*_*One 12
规则如下:
object,Type.Missing传递.null将传递.Nullable<T>这意味着你会得到一个Nullable<T>实例,它是等于null(该HasValue属性将返回false)请注意,除了类型参数之外的所有内容object,它都相当于default(T).
我有点意外,因为C#4.0规范没有说明结果会是什么,我希望它会在那里.
另外(如评论中的Scott Rippey所示),这是在编译时进行评估,这不是运行时操作,这意味着如果您已在已部署的其他程序集中调用此方法,并且您更改了可选值,传递给方法的默认值不会更改,除非您编译对程序集中的方法进行调用的所有内容.