2017-02-17 5 views
0

Peut être ceci est une question stupide mais: Je me demande s'il y a quelque chose comme le paramètre par défaut mais pas par la valeur - mais par le nom.C# paramètre par défaut par le nom est-ce possible?

Exemple:

Je dois utiliser un paramètre « pilote IWebDriver » dans un grand nombre de mes méthodes. Et je sais que toujours quand je l'utilise j'utiliserai le nom "driver" - l'objet derrière le nom peut être différent (IE, FF, Chrome ..) mais le nom sera toujours le même.

Ainsi est-il possible d'avoir une fonction

public void CheckName(string nameToCheck, string expectedValue, IWebDriver driver = driver with name "driver") 
{ 
    some code.... 
} 

Et quand je l'utilise pas faire:

CheckName("MyName", "MyName", driver) 

mais à faire:

CheckName("MyName", "MyName") 

... et la méthode sait qu'il faut obtenir l'objet avec le nom (string) "driver".

Si je veux utiliser un autre nom que par défaut juste pour préciser:

CheckName("MyName", "MyName", driverOtherName) 
+0

Ajouter un tas de surcharges? –

+0

D'où la méthode obtiendra l'objet pilote si vous ne voulez pas le passer explicitement? Pouvez-vous fournir plus d'informations? –

+0

Si je comprends bien votre question, vous voulez vérifier le nom de la variable qui stocke votre valeur de paramètre (facultatif). Et non, ce n'est pas possible. Les noms de variables (devraient) n'ont absolument aucune signification pour votre code, ils pourraient être n'importe quoi. –

Répondre

2

Non, il n'y a aucun moyen de le faire. Les paramètres par défaut doivent avoir des valeurs constantes - ils ne peuvent pas dépendre d'une valeur tirée d'une variable locale.

On dirait que vous devriez probablement construire une instance qui stocke une référence pilote dans un champ, vous pouvez simplement appeler les méthodes sur cette instance et il peut utiliser la valeur du champ:

public class FooChecker 
{ 
    private readonly IWebDriver driver; 

    public FooChecker(IWebDriver driver) 
    { 
     this.driver = driver; 
    } 

    public void CheckName(string nameToCheck, string expectedValue) 
    { 
     // Use driver here 
    } 
} 

Ensuite, vous pouvez utiliser:

var checker = new FooChecker(driver); 
checker.CheckName("MyName", "MyName"); 
checker.CheckName("MyName2", "MyName2"); 
+0

Eh bien, vous pouvez facilement utiliser 'null' comme paramètre par défaut et quelque chose comme' driver = driver ?? myLocalVariable' dans la méthode. Mais je suppose que ce n'est pas une question OPs. –

+0

@lukegv C'est ce que Jon veut dire par valeurs constantes. – EpicKip

+0

Ok si je veux qu'une classe FooChecker (driver) fasse partie du paquet nuget avec le nom Test? Est-ce possible d'écrire "using Test.FooChecker (driver)? – Stanislava