c# - 是否使用 "Optional, DefaultParameterValue"属性?

标签 c# c#-4.0 optional-parameters

使用 OptionalDefaultParameterValue 属性与不使用它们有什么区别吗?

public void Test1([Optional, DefaultParameterValue("param1")] string p1, [Optional, DefaultParameterValue("param2")] string p2)
{
}

public void Test2(string p1= "param1", string p2= "param2")
{
}

两者都有效:

Test1(p2: "aaa");
Test2(p2: "aaa");

最佳答案

它们的编译方式相同,并且编译器都可以正常工作。唯一的区别是缺少 using System.Runtime.InteropServices;,并且更易于阅读代码。

作为引用,IL 是:

.method public hidebysig instance void TheName([opt] string p1,
    [opt] string p2) cil managed
{
    .param [1] = string('param1')
    .param [2] = string('param2')
    .maxstack 8
    L_0000: ret 
}

TheName 是唯一发生变化的地方。

关于c# - 是否使用 "Optional, DefaultParameterValue"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171095/

相关文章:

c#-4.0 - Entity Framework - IQueryable 到 DataTable

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

c# - (可选)将结构传递给 C# 中的自定义函数

c - MSVC : "too few arguments in function call" when omitting optional parameter

SQL 到大数据的迁移?

c# - 单击按钮后程序卡住?

c# - 如果未选择任何内容,则不显示上下文菜单

c# - path.getrandomfilename 每次都会生成一个唯一的文件名吗?

visual-studio-2010 - 不允许访问数据库文件。

c# - 阻止用户调整 ListView 中的列宽?