c#中神秘的"F冒号"

Per*_*hik 11 c# syntax

我正在使用ReSharper重构一些c#代码.我遇到的一件事是我不熟悉的ac #manrator.

在我的代码中,我有这个

Mathf.FloorToInt(NumRows/2)
Run Code Online (Sandbox Code Playgroud)

其中NumRows是一个整数.ReSharper建议我将其更改为

Mathf.FloorToInt(f: NumRows/2)
Run Code Online (Sandbox Code Playgroud)

我很确定这f:是一个标志,告诉它将NumRows转换为浮点数,但我找不到任何f:在线文档.任何人都可以详细说明究竟是f:做什么或将我链接到MSDN页面吗?

(虽然我很清楚f:做什么,但是很难在互联网上搜索冒号,我想在使用之前知道它做了什么)

更新1:无论我想做什么,我都对f-colon语法感兴趣

更新2:事实证明,实际上Visual Studio建议我可以添加参数名称'f'而不是ReSharper,但这不会改变正确的答案..

Bri*_*sen 20

这是一个命名参数.看看定义Mathf.FloorToInt,它将有一个名为的参数f.

Resharper指示在这种情况下通过使用命名参数可以使代码更具可读性.

  • @NathanMann和你为什么[使用](http://stackoverflow.com/questions/11507420/event-observer-input-into-database/11507841#11507841)链接你的答案?... (8认同)
  • @NathanMann,虽然链接可能会改变是正确的,但是这里给出的描述("命名参数")足以在Google变得无效的情况下再次在Google中轻松找到它(只需添加"c#"即可获得信息)你需要).有时甚至正确的答案都很短. (3认同)

das*_*ght 9

在C#4.0中,您可以在方法调用中切换参数表达式.

当只有一个参数时,它对你没什么帮助,如果有的话:如果只有一个参数,表达式代表什么是毫无疑问的.但是,使用多个参数时,该功能会更有用:您可以将参数名称与表示其值的表达式配对,并以您喜欢的任何顺序传递参数.程序的读者不需要引用方法签名来理解什么表达式代表哪个参数.

private static void MyMethod(int a, int b, int c) {
    Console.WriteLine("{0} {1} {2}", a, b, c);
}

public static void Main(string[] args) {
    MyMethod(1, 2, 3);
    MyMethod(c:1, a:2, b:3);
}
Run Code Online (Sandbox Code Playgroud)

这打印

1 2 3
2 3 1
Run Code Online (Sandbox Code Playgroud)