MSDN 的 VS2010 Named and Optional Arguments (C# Programming Guide)向我们介绍了 C# 中的可选参数,显示了我期望的代码:
public void ExampleMethod(int required,
string optionalstr = "default string",
int optionalint = 10)
好的,但它还说:
You can also declare optional parameters by using the .NET OptionalAttribute class. OptionalAttribute parameters do not require a default value.
我读了MSDN's OptionalAttribute page ,并完成了在线搜索(这表明很多人声称 C# 无法使用 OptionalAttribute 参数——我猜这些评论是在 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 ),这是在编译时评估的,这不是运行时操作,这意味着如果您在其他已部署的程序集中调用了此方法,并且您更改了可选值,传递给该方法的默认值将不会改变,除非您编译在程序集中针对该方法进行调用的所有内容。
关于c# - OptionalAttribute 参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416216/