2

今天我的 Resharper 5 副本中发生了一些奇怪的事情。我有一个看起来像这样的类:

public class Foo
{
    public string Username { get; private set; }

    public Foo (string userName) { Username = userName; }

    public void Bar()
    {
        DoWork(Username);
    }

    public void DoWork(string userName) { }
}

当我开始输入 DoWork(我们从智能感知得到以下信息时:

替代文字

请注意,它正在提取构造函数参数,并以冒号结尾:userName:

这里发生了什么?

编辑:

正如 Reed 在下面回答的那样,这是一个名为Named and Optional Arguments的新 C# 4 功能。它的目的是允许您指定参数的名称,而不是它在参数列表中的位置。所以你不必记住参数在参数列表中的位置来使用它(尽管这对于智能感知来说基本上没有意义)。它确实使可选参数更易于使用。

谢谢里德。

4

2 回答 2

9

这是 Resharper 为Named 和 Optional Arugments提供智能感知支持。

C# 4 增加了对这些的支持。您现在可以像这样定义一个方法:

public void DoWork(int someArgument = 3, string userName = "default") 
{
    // ...

如果您想使用不同的“用户名”调用它,但保留其他参数的默认值,您可以执行以下操作:

this.DoWork(userName: "FooUser");

Resharper 5 在智能感知中增加了对这种语法的支持。

于 2010-06-15T19:16:30.297 回答
2

你没有包括 ; 在用户名的末尾

public Foo (string userName) { Username = userName; }
于 2010-06-15T19:15:21.013 回答