Maison >développement back-end >C++ >Comment puis-je tester de manière générique si une chaîne peut être analysée selon un type spécifique ?

Comment puis-je tester de manière générique si une chaîne peut être analysée selon un type spécifique ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 19:05:16367parcourir

How Can I Generically Test if a String Can Be Parsed to a Specific Type?

Test générique de chaînes avec TryParse

Dans une tentative de création d'une méthode d'extension générique pour vérifier les valeurs de chaîne, vous avez rencontré un problème avec « TryParse » n'étant défini dans aucun interface et recherché une solution alternative.

Approche alternative utilisant TypeDescriptor

La classe TypeDescriptor fournit un moyen de récupérer un convertisseur de type pour un type de données donné. Ce convertisseur peut être utilisé pour convertir des chaînes vers et depuis d’autres types. Voici une version mise à jour de votre code :

public static bool Is(this string input, Type targetType)
{
    try
    {
        TypeDescriptor.GetConverter(targetType).ConvertFromString(input);
        return true;
    }
    catch
    {
        return false;
    }
}

Dans cette version, vous pouvez transmettre n'importe quel type cible et il tentera de convertir la chaîne en ce type à l'aide du convertisseur approprié. Si la conversion réussit, la méthode renvoie true ; sinon, il renvoie false.

Exceptions et alternatives

Bien que l'approche basée sur les exceptions fonctionne, vous préférerez peut-être une option plus robuste. Au lieu d'utiliser des exceptions, vous pouvez renvoyer une valeur Nullable valeur, indiquant si la conversion a réussi.

Vous pouvez également créer des surcharges pour les types courants, tels que int, double et DateTime, et définir une logique personnalisée pour chaque type. Cela éliminerait le besoin d'une implémentation générique et fournirait des conversions plus efficaces et plus sûres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn