OptionalAttribute参数的默认值?
MSDN的VS2010 Named and Optional Arguments (C# Programming Guide)告诉我们在C#中的可选参数,显示像我期望代码:OptionalAttribute参数的默认值?
public void ExampleMethod(int required,
string optionalstr = "default string",
int optionalint = 10)
好,但它也说:
您还可以通过使用声明可选 参数.NET OptionalAttribute类。 OptionalAttribute参数不需要 需要一个默认值。
我读MSDN's OptionalAttribute page,并在线进行搜索(这说明很多人声称OptionalAttribute参数不能用C#消耗 - ?我猜这些评论之前,C#4发),但我可以”找不到答案的两个问题:
如果我使用OptionalAttribute将其定义为可选C#参数:
- 什么价值会如果我调用该方法,并且不指定该参数的值可以用吗?
- 将在编译时或运行时评估该值吗?
规则是这样的:
- 对于
object
类型的参数,Type.Missing
被传递。 - 对于其他参考类型,通过
null
。 - 对于值类型,传递default of the value type。
- 为
Nullable<T>
,这意味着你会得到一个Nullable<T>
实例等于null
(该HasValue
property将返回false
)
- 为
需要注意的是,除了object
类型的参数一切的情况下,这相当于default(T)
。
我有点惊讶,因为C# 4.0 specification没有指出结果会是什么,我希望它在那里。
另外(如indicated by Scott Rippey in the comments),这是在编译时计算的,这不是运行时操作,这意味着如果您在已经部署的其他程序集中调用此方法,并且您更改了可选值,除非您编译所有对程序集中的方法进行调用的所有内容,否则传递给该方法的默认值将为而不是。
你还应该提到这是在编译时评估的。编译时,编译器实际上将默认值插入到**调用**代码中。 – 2012-02-01 04:04:41
@ScottRippey完成。 – casperOne 2012-02-01 20:43:05
我认为值得一提的是,当通过反射调用一个方法时,你传入'Type。Missing',并在* run *时间将被调用的方法中插入适当的值。所以它可以在运行时以及编译时完成。 (参考:['Type.Missing'](http://msdn.microsoft.com/en-us/library/system.type.missing.aspx)) – 2012-12-17 04:02:23
在调试中运行它并检查它的值。我会怀疑空。 – 2010-08-05 15:18:17
那么,我会怀疑'default(T)'是null或零。 – 2010-08-05 15:21:46