Définition de la valeur par défaut D'un paramètre C# Optional

chaque fois que j'essaie de définir la valeur par défaut d'un paramètre optionnel à quelque chose dans un fichier ressource, j'obtiens une erreur de compilation de

la valeur par défaut du paramètre 'message' doit être une constante de temps de compilation.

est-ce que je peux changer la façon dont les fichiers de ressources fonctionnent pour rendre cela possible?

public void ValidationError(string fieldName, 
                            string message = ValidationMessages.ContactNotFound)

en ceci, ValidationMessages est un fichier de ressources.

22
demandé sur nawfal 2010-04-28 17:07:16

3 réponses

Non, vous ne pourrez pas faire fonctionner la ressource directement dans la valeur par défaut. Ce que vous devez faire est de définir la valeur par défaut à quelque chose comme null et ensuite faire la recherche de ressource lorsque le paramètre a la valeur par défaut dans le corps de la méthode.

12
répondu Tom Cabanski 2010-04-28 13:08:58

une option est de faire la valeur par défaut null et puis peupler que de manière appropriée:

public void ValidationError(string fieldName, string message = null)
{
    string realMessage = message ?? ValidationMessages.ContactNotFound;
    ...
}

bien sûr, cela ne fonctionne que si vous ne voulez pas permettre null comme valeur réelle.

une autre option possible serait d'avoir une étape de pré-construction qui créerait un fichier plein de chaînes const basées sur les ressources; vous pourriez alors référencer ces consts. Il serait assez maladroit.

14
répondu Jon Skeet 2010-04-28 13:09:07

une autre option est de diviser votre méthode en deux, et que l'un appelle l'autre en surcharge, comme ceci:

public void ValidationError(string fieldName)
{ 
    ValidationError(fieldName, ValidationMessages.ContactNotFound);
}

public void ValidationError(string fieldName, string message)
{
    ...
}

de Cette façon, vous permet également de passer null comme valeur pour message dans le cas qui est également une valeur valide pour ce paramètre.

11
répondu Adi Lester 2012-02-19 12:16:37