7
votes

Comment puis-je remplacer Tryparse?

Je voudrais remplacer bool 's tryparse 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 . XXX


0 commentaires

5 Réponses :


1
votes

Ce n'est pas possible.


0 commentaires

5
votes

tryparse est une méthode statique. Vous ne pouvez pas remplacer une méthode statique.


2 commentaires

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.



11
votes

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);


7 commentaires

Personnellement, j'aime mes méthodes d'analyse pour retourner nullable <> , où la valeur de retour est null 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;


Nullables sont vraiment utiles pour l'analyse, mais j'essayais de remplacer la méthode existante Tryparse . Maintenant que j'écris le moi, je vais probablement faire quelque chose comme ça. En outre, j'utilise stringcomparoison.ordinalisorecase 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 ? (Bien que je suppose que si vous avez changé sur nullables , vous auriez besoin de la nommée.)


@ cyclotis04 - Bon appel. En raison du paramètre OUT, le nom Tryparse 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 (surtout sur une classe comme couramment utilisée comme system.string ) 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 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) vs "chaîne" .tryparse (valeur de sortie) .



3
votes

tryparse code> est une méthode statique et vous ne pouvez pas remplacer les méthodes statiques.

Vous pouvez toujours essayer de créer une méthode d'extension pour les chaînes pour faire ce que vous voulez: P>

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


2 commentaires

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.



2
votes

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");
        }
    }
}


1 commentaires

Apparemment, je ne suis pas le seul à le suggérer.