C# method call with parameter name and colon

2019-01-17 19:34发布

I've begun to notice at times when I'm making method calls in C# that the names of the parameters for the method I'm calling will show up in the intellisense list appended with a colon, and that I can then format the method call thusly:

MethodCall(parameter1:value1, parameter2:value2);

Is this a new language feature? It reminds me of the way you can call stored procedures in SQL and specify parameter names like so:

spDoSomeStuff @param1 = 1, @param2 = 'other param'

Is this a similar feature? If so, to what end? If not, what is it and what is it to be used for.

6条回答
闹够了就滚
2楼-- · 2019-01-17 20:05

It is worth mentioning, unlike optional parameters, you can skip certain arguments and pass only the parameters you are interested in.

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);
}
查看更多
霸刀☆藐视天下
3楼-- · 2019-01-17 20:07

@Krumelur said that "Named parameters are standard in ObjectiveC for instance."

That's not actually correct. Objective-C uses an infix notation, so that this message call:

[foo setRed:255 Green:255 Blue:0];

is the setRed:Green:Blue: message (including those colons!) with the (255,255,0) arguments interspersed within the message name.

Although, granted, at first blush Objective-C's syntax gives the appearance that Objective-C uses named parameters. But that is not actually correct, and misunderstanding the difference can be an impediment for learning Objective-C.

(I would have answered in a comment, but I somehow lost all my reputation points and I'm starting over. Drat. C'est la vie.)

查看更多
Lonely孤独者°
4楼-- · 2019-01-17 20:18

Scott Gu has introduced this new feature in his blog:

Optional Parameters and Named Arguments in C# 4

查看更多
萌系小妹纸
5楼-- · 2019-01-17 20:19

Named parameters allow you explicitly set the value of arguments in a custom order independent of the signature. Method signatures are defined by the argument types, ie, Foo( int i, bool b ), which will only accept arguments of type int and bool in that order. Named arguments allow you to pass b first and i second.

查看更多
仙女界的扛把子
6楼-- · 2019-01-17 20:20

It's the Named and Optional Parameters that came in with C# 4.

查看更多
Summer. ? 凉城
7楼-- · 2019-01-17 20:27

It's a new feature. See here: http://msdn.microsoft.com/en-us/library/dd264739.aspx Named parameters are standard in ObjectiveC for instance. It takes some time to get used to them but they are a good thing. Only from looking you can tell what a parameter is meant for.

查看更多
登录 后发表回答