c# - OptionalAttribute 参数的默认值?

标签 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)

好的,但它还说:

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

  1. 如果我调用该方法但不指定该参数的值,将使用什么值?
  2. 该值是在编译时还是运行时求值?

最佳答案

规则是这样的:

请注意,除了 object 类型的参数之外的所有情况, 它相当于 default(T) .

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

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

关于c# - OptionalAttribute 参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416216/

相关文章:

c# - 在 Xamarin Android 中访问 UI 线程

c# - 当涉及到带有大量可选参数的函数时,约定是什么?

python - 用于将可选参数匹配为字符串中的组的正则表达式

python - 将 "x if x is not None else y"重构为 "x or y"

c# - 当 C# 函数参数包含 `= null` 时,这意味着什么?

c# - 根据 const 值强制 C# 编译器错误

c# - 编码模式 c#

C#:绘制自己的条形图

scala - 将参数添加到具有默认值的案例类

c++ - 默认值为Global const vs.函数返回值