2010-05-05 22 views
3

J'utilise souvent String.Format() car cela rend la construction de chaînes plus lisible et gérable.Existe-t-il un moyen de réduire la verbosité de l'utilisation de String.Format (...., p1, p2, p3)?

est-il de toute façon à réduire sa verbosité syntactique, par exemple avec une méthode d'extension, etc.?

Logger.LogEntry(String.Format("text '{0}' registered", pair.IdCode)); 

public static void LogEntry(string message) 
{ 
    ... 
} 

par exemple, Je voudrais utiliser toutes mes et d'autres méthodes qui reçoivent une chaîne de la façon dont je l'utilise, Console.Write() .: par exemple

Logger.LogEntry("text '{0}' registered", pair.IdCode); 
+0

Ce que je veux vraiment le soutien pour le patch de Miguel: http://tirania.org/blog/archive/2009/Dec-20.html – RedFilter

Répondre

13

Que diriez-vous:

static void LogEntry(string format, params object[] args) { 
    Console.WriteLine(format, args); // For example. 
} 

Maintenant, vous pouvez l'appeler comme ceci:

Logger.LogEntry("text '{0}' registered", pair.IdCode); 
+0

@Konrad me donne une param erreur du compilateur. Le mot-clé est params. – chocojosh

+0

@chocojosh: Typo. Merci. –

1

Si Logger.LogEntry est une méthode statique hors de votre contrôle, aucune; vous pouvez uniquement ajouter des méthodes d'extension aux instances. Si c'est votre type, vous pouvez ajouter:

public static void LogEntry(string format, params object[] args) { 
    ... string.Format(format,args) ... 
} 
4

Si vous contrôlez la méthode Logger.LogEntry, vous pouvez simplement ajouter une surcharge qui englobe le string.format. Déclarez simplement le second paramètre en tant que paramarray et vous êtes prêt à partir!

+0

@Mitchel: Je pense que c'est une réponse raisonnable dans ce cas, mais je Je suggère qu'une extension sur String est plus généralement utile. –

+0

@Steven - Oui et non, pour son projet oui, pour d'autres appelants de Logger.LogEntry() une surcharge serait mieux –

2

Oui, vous pouvez faire une méthode d'extension du nom FormatWith, ce qui vous permet de dire des choses comme:

Logger.LogEntry("I hate my {0}".FormatWith(itemName)); 

Il devrait être assez facile à rouler vos propres, mais voici un exemple: http://james.newtonking.com/archive/2008/03/27/formatwith-string-format-extension-method.aspx

+0

Grand moment, mais dans une perspective de développement, Logger.LogEntry est une fonction d'utilité que beaucoup de gens vont appeler, il serait bon, à mon avis, pour obtenir la méthode pour le soutenir ainsi. Plus c'est à peu près aussi verbeux que string.format ..... Mais pour les auteurs, c'est la réponse la plus correcte. –

+0

Je ne suis pas en désaccord quant à l'utilité de la surcharge que vous avez suggérée: j'ai fait à peu près la même chose moi-même. Je ne suis pas d'accord avec l'idée qu'une méthode FormatWith est aussi verbeuse que String.Format, non seulement parce qu'elle est plus courte, mais parce que l'avoir comme une méthode non statique la rend beaucoup moins envahissante. Je crois que la vraie question est de savoir si une surcharge ad hoc est une solution générale. Vous n'allez pas faire une surcharge pour chaque méthode qui prend une chaîne, mais avec une méthode d'extension, vous avez l'avantage de le faire. –

+0

@Mitchel Vendeurs: Désolé, j'ai oublié d'utiliser un @ pour vous assurer que vous avez vu la réponse. –

0

Vous pouvez utiliser le mot-clé params de combiner tous les arguments après le premier argument dans un tableau et passer ce tableau à String.Format.

static void FormatString(string myString, params string[] format) 
{ 
    Console.WriteLine(String.Format(myString, format)); 
}