使用参数名称和冒号调用C#方法

Zan*_*son 32 c# language-features method-call

我开始注意到,当我在C#中进行方法调用时,我调用的方法的参数名称将显示在附加冒号的intellisense列表中,然后我可以格式化该方法这样打电话:

MethodCall(parameter1:value1, parameter2:value2);
Run Code Online (Sandbox Code Playgroud)

这是一种新的语言功能吗?它让我想起了在SQL中调用存储过程的方式,并指定参数名称,如下所示:

spDoSomeStuff @param1 = 1, @param2 = 'other param'
Run Code Online (Sandbox Code Playgroud)

这是一个类似的功能吗?如果是这样,到底是什么?如果没有,它是什么以及它用于什么.

Kru*_*lur 37

这是一个新功能.请参阅此处:http://msdn.microsoft.com/en-us/library/dd264739.aspx例如, 命名参数是ObjectiveC中的标准参数.它需要一些时间来适应它们,但它们是一件好事.只有从你看,你可以告诉参数是什么意思.

  • 我可以看到很多值,让参数名称立即可见,而不必导航到方法的定义或让intellisense告诉你它们都是什么. (7认同)

Bra*_*etz 20

命名参数允许您以独立于签名的自定义顺序显式设置参数的值.方法签名由参数类型定义,即Foo(int i,bool b),它只接受int和bool类型的参数.命名参数允许您先传递b和第二个传递.

  • @Zannjaminderson对我来说,当你拥有许多默认值的方法时,真正的价值就来了.如果您只需要更改其中一些,可以使用命名参数选择它们.这样,您就不必重新设置要更改的值之前的所有默认值. (3认同)
  • 我熟悉方法签名的概念,并且想知道这是否允许您更改调用中参数的顺序。不过我很好奇-能够更改订单有什么意义? (2认同)

ven*_*ent 12

值得一提的是,与可选参数不同,您可以跳过某些参数并仅传递您感兴趣的参数.

public void Example(int required, string StrVal = "default", int IntVal = 0)
{
    // ...
}

public void Test()
{
    // This gives compiler error
    // Example(1, 10);

    // This works
    Example(1, IntVal:10);
}
Run Code Online (Sandbox Code Playgroud)


CD.*_*D.. 5

Scott Gu在他的博客中介绍了这个新功能:

C#4中的可选参数和命名参数