2010-06-15 31 views
2

今天我有一些奇怪的发生在我的ReSharper的5副本我有一个类,看起来像这样:ReSharper的智能感知混乱

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(我们我得到了来自智能感知以下内容:

alt text http://i50.tinypic.com/285zfd.png

注意,它拉起构造函数的参数,它以冒号结尾:用户名:

什么去这里?

编辑:

芦苇下面回答,这就是所谓的Named and Optional Arguments一个新的C#4的功能。它的目的是让你指定一个参数的名字,而不是它在参数列表中的位置。所以你不必在参数列表中记住参数的位置来使用它(尽管这对intellisense来说在很大程度上是毫无意义的)。它确实使可选参数更易于使用。

谢谢里德。

+0

你应该将他的回答标记为答案。 – joshlrogers 2010-06-15 19:29:19

+0

我的歉意......我很明显今天没有参加比赛......谢天谢地,现在是时候回家了。 – joshlrogers 2010-06-15 19:33:30

回答

9

这是resharper提供intellisense支持Named and Optional Arugments

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

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

如果你想用一个不同的“username”的呼吁这一点,但留给其他参数的默认值,你可以这样做:

this.DoWork(userName: "FooUser"); 

ReSharper的5在intellisense中添加对此语法的支持。

+0

这是正确的答案,我没有仔细阅读,我猜。 – joshlrogers 2010-06-15 19:21:00

+0

这并没有帮助我做了两个拼写错误(分号并且没有大写DoWork的参数..现在修正了)。我怀疑这可能是一些深奥的新C#4功能,但并不确定。实际上,我认为这是构造函数参数,它是DoWork()参数。 – 2010-06-15 19:22:43

2

您没有包括;在用户名末尾

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

我没有读得够近。我假设因为缺乏;它仍然在Foo方法中出于intellisense的目的而看到它本身,但是因为:在userName的末尾,它是针对命名参数的,如里德所说。 – joshlrogers 2010-06-15 19:22:13

+0

这是真的,但不是什么在这里造成混乱。他也缺少DoWork方法的返回类型,并且(在他的原始版本中)将其定义为“public void DoWork(string userName)”[用户名中的大写N)... – 2010-06-15 19:22:15

+0

修复了返回类型。在试图简化这个例子的时候,错别字是一个杀手。 – 2010-06-15 19:30:25