OptionalAttribute参数的默认值是?

时间:2010-08-05 15:15:28

标签: c# default-value optional-parameters

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#参数定义为可选:

  1. 如果我调用该方法并且未指定该参数的值,将使用什么值?
  2. 将在编译时或运行时评估该值吗?

1 个答案:

答案 0 :(得分:12)

规则如下:

请注意,对于除false类型参数之外的所有内容,它等同于object

我有点意外,因为C# 4.0 specification没有说明结果会是什么,我希望它会在那里。

另外(作为indicated by Scott Rippey in the comments),这是在编译时计算的,这不是运行时操作,这意味着如果您已在已部署的其他程序集中调用此方法,并且您更改了可选值,传递给方法的默认值将 not 更改,除非您编译对程序集中的方法进行调用的所有内容。