2009-05-27 4 views

Répondre

8

Vous ne pouvez pas définir votre propres opérateurs pour la classe de chaîne et les utiliser à partir de C#. (F # vous permet de créer des opérateurs pour les classes arbitraires, un peu comme les méthodes d'extension, mais pour d'autres types de membres.)

Ce que vous pouvez faire est d'écrire une méthode d'extension:

public static string DefaultIfEmpty(this string original, string defaultValue) 
{ 
    return string.IsNullOrEmpty(original) ? defaultValue : original; 
} 

Et appelez avec :

string val = anotherValue.DefaultIfEmpty("Default Val"); 

Si vous ne voulez pas d'évaluer la chaîne « par défaut » à moins qu'il est nécessaire, vous pourriez avoir une surcharge prendre une fonction:

public static string DefaultIfEmpty(this string original, 
            Func<string> defaultValueProvider) 
{ 
    return string.IsNullOrEmpty(original) ? defaultValueProvider() : original; 
} 

Et appelez avec:

string val = anotherValue.DefaultIfEmpty(() => "Default Val"); 
+0

Eh bien, vous pouvez ajouter vos propres opérateurs à la classe de cordes en fa #, qui fait partie de .NET. Vous ne pouvez pas le faire en C# - ou utiliser les opérateurs F # de C#. –

+0

Hmm ... Je dirais que F # vous permet d'utiliser des opérateurs définis ailleurs pour les types. Mais oui, je vais modifier la réponse pour refléter cela. –

+0

Bon, vrai - vous n'ajoutez pas vraiment l'opérateur à la classe String dans F #, vous définissez un opérateur infixe qui prend des paramètres de chaîne. J'ai essayé de faire un opérateur qui fait la même chose que DefaultIfEmpty, et cela fonctionne très bien - sauf que cela ne fonctionnerait pas quand j'ai utilisé des points d'interrogation dans le symbole de l'opérateur, pour une raison quelconque. –

Questions connexes