Je voudrais remplacer bool code> 's
tryparse code> méthode pour accepter "Oui" et "Non". Je connais la méthode que je veux utiliser (ci-dessous) mais je ne sais pas comment remplacer la méthode
BOOL code>.
5 Réponses :
Ce n'est pas possible. P>
tryparse code> est une méthode statique. Vous ne pouvez pas remplacer une méthode statique. P>
Le meilleur moyen de le faire est-il juste d'être avec une fonction d'assistance de la mienne, alors?
Écrivez votre propre méthode d'extension pour le type de chaîne.
Vous ne pouvez pas remplacer une méthode statique. Vous pouvez toutefois créer une méthode d'extension.
string a = "yes"; bool isTrue; bool canParse = a.TryParse(out isTrue);
Personnellement, j'aime mes méthodes d'analyse pour retourner nullable <> code>, où la valeur de retour est
null code> si la chaîne ne peut pas être analysée. Cela élimine le besoin d'un paramètre Out et fait pour une belle syntaxe d'appel. par exemple.
bool a = "bla" .parsebool () ?? faux; code>
Nullables CODE> sont vraiment utiles pour l'analyse, mais j'essayais de remplacer la méthode existante
Tryparse code>. Maintenant que j'écris le moi, je vais probablement faire quelque chose comme ça. En outre, j'utilise
stringcomparoison.ordinalisorecase code> mais je n'ai pas dit dans mon exemple simplement pour le rendre plus propre. Enfin, pourquoi étiqueteriez-vous votre méthode 'Tryparseboolcan' lorsque votre type OUT est un
bool code>? (Bien que je suppose que si vous avez changé sur
nullables code>, vous auriez besoin de la nommée.)
@ cyclotis04 - Bon appel. En raison du paramètre OUT, le nom Tryparse code> serait en effet suffisant.
J'ai peut-être suscité cela, mais je ne vois absolument aucun sens dans la création d'une méthode extension i> (surtout sur une classe comme couramment utilisée comme system.string code>) lors d'une simple méthode statique suffirait. Il est extrêmement troublant que tout le monde semblait avoir la même idée aussi; Il semble y avoir une obsession continue avec l'utilisation de méthodes d'extension dans des endroits inappropriés.
Est-ce que ça marche? Je veux dire, la signature de la méthode de Tryparse d'origine est également "Bool Tryparse (String, Out Bool). Est-ce que la jette une erreur de compilateur ou ombragère la méthode Tryparse?
Qu'est-ce qui est moins simple à propos d'une méthode d'extension? Où mettriez-vous une méthode statique? Le problème que j'ai avec des méthodes statiques est qu'il conduit à des classes sans but autre que de détenir des méthodes d'assistance qui auraient dû être des méthodes d'extension en premier lieu.
@Schlawiener - L'original Tryparse code> n'est pas une méthode d'extension et est définie dans une classe différente. La différence est
bool.trypsarse ("chaîne", valeur de sortie) code> vs
"chaîne" .tryparse (valeur de sortie) code>.
Vous pouvez toujours essayer de créer une méthode d'extension pour les chaînes pour faire ce que vous voulez: P> tryparse code> est une méthode statique et vous ne pouvez pas remplacer les méthodes statiques.
public static bool ParseYesNo(this string str, out bool val)
{
if(str.ToLowerInvariant() == "yes")
{
val = true;
return true;
}
else if (str.ToLowerInvariant() == "no")
{
val = false;
return true;
}
return bool.TryParse(str, out val);
}
Le problème avec cela est que j'essaie de savoir si la chaîne est valide boolean - vrai, false, oui, non, 1, 0. "Non" est valide booléen, bien qu'il retourne faux.
@ cyclotis04 - J'ai mis à jour ma réponse pour mieux répondre à vos besoins. La méthode d'extension se comporte maintenant plus comme bool.trypsarse (). Personnellement, je ne suis pas un gros fan des paramètres.
Vous ne pouvez pas remplacer tryparse code>. Cependant, vous pouvez créer une méthode d'extension sur
chaîne code> pour plus de commodité.
public static class Program
{
public static void Main(string[] args)
{
bool result;
string value = "yes";
if (value.TryParseToBoolean(true, out result))
{
Console.WriteLine("good input");
}
else
{
Console.WriteLine("bad input");
}
}
}
Apparemment, je ne suis pas le seul à le suggérer.