2010-06-15 28 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