2010-06-15 7 views
2

Aujourd'hui, j'ai eu quelque chose de bizarre se produire dans ma copie de ReSharper 5. J'ai une classe qui ressemble à ceci:ReSharper IntelliSense confusion

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) { } 
} 

Quand je commence à taper DoWork (nous, je reçois le texte suivant de IntelliSense:

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

Notez que cela tire l'argument du constructeur, et il se termine par deux points: userName:

Quoi de passe ici?

EDIT:

Comme Reed a répondu ci-dessous, c'est un nouveau C# 4 fonctionnalité appelée Named and Optional Arguments. Son but est de vous permettre de spécifier le nom d'un argument plutôt que sa position dans une liste de paramètres. vous n'avez donc pas besoin de vous souvenir de la position d'un argument dans la liste des arguments pour l'utiliser (bien que cela soit en grande partie dépourvu de signification avec intellisense). Cela rend cependant les arguments facultatifs plus faciles à utiliser.

Merci Reed.

+0

Vous devriez marquer sa réponse comme la réponse. – joshlrogers

+0

Mes excuses ... Je ne suis évidemment pas sur la balle aujourd'hui ... heureusement, il est temps de rentrer à la maison. – joshlrogers

Répondre

9

Ceci est Resharper fournir un appui pour intellisense Named and Optional Arugments.

C# 4 a ajouté le support pour ceux-ci. Vous pouvez maintenant avoir une méthode définie comme ceci:

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

Si vous voulez appeler cela avec un autre « userName » mais laisser la valeur par défaut pour les autres paramètres, vous pouvez le faire:

this.DoWork(userName: "FooUser"); 

ReSharper 5 ajoute le support pour cette syntaxe dans intellisense.

+0

Ceci est la bonne réponse, je n'ai pas lu assez près, je suppose. – joshlrogers

+0

Il n'a pas aidé que j'ai fait deux fautes de frappe (le point-virgule et ne capitalise pas le paramètre de DoWork .. fixé maintenant). Je pensais que cela pourrait être une nouvelle fonctionnalité C# 4 ésotérique, mais n'était pas sûr. Je pensais que c'était le paramètre constructeur alors qu'en réalité c'était le paramètre DoWork(). –

2

Vous n'avez pas inclus le; à la fin de userName

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

Je n'ai pas lu assez près. Je supposais parce que le manque de; il se voyait encore dans la méthode Foo à des fins intellisense mais à cause de: à la fin de userName il est pour un paramètre nommé comme Reed dit. – joshlrogers

+0

Ceci est vrai, mais pas ce qui cause la confusion ici. Il manque également un type de retour pour la méthode DoWork, et (dans son original) l'aurait défini comme "public void DoWork (string userName)" [avec un N majuscule dans userName] ... –

+0

Correction du type de retour. Tout en essayant de simplifier l'exemple, les fautes de frappe sont un tueur .. merci de les signaler. –