Click here to Skip to main content
Licence CPOL
First Posted 3 Jul 2010
Views 5,695
Bookmarked 3 times

TIP: Improve Readability with Shorter String.Format Statements

By | 3 Jul 2010 | Technical Blog
String.Format is a wonderful method, a real life saver when it comes to producing (readable) formatted text from within code. 
A Technical Blog article. View original blog here.[^]

String.Format is a wonderful method, a real life saver when it comes to producing (readable) formatted text from within code. I use it everywhere, but it gets a bit tedious typing the same boilerplate code to use it properly:

string formatted = string.Format(CultureInfo.InvariantCulture, 
"Formatted text {0:-15} example generated on {1:d}", meaningfulString, DateTime.Now);

That “string.Format(CultureInfo.InvariantCulture,” over 40 characters before you get the meat of the statement.  Sure you can drop the invariant culture bit but then you can introduce weird formatting problems on different machines…. no, what I need is a useful extension method to take my pain away:

 /// <summary>
 /// Populates the template using the provided arguments and the invariant culture
 /// </summary>
 /// <param name="template">The template.
 /// <param name="args">The args.
 public static string ToFormattedString(this string template, params object[] args)
 {
     return template.ToFormattedString(CultureInfo.InvariantCulture, args);
 }
  
 /// <summary>
 /// Populates the template using the provided arguments using the provided formatter
 /// </summary>
 /// <param name="template">The template.
 /// <param name="formatter">The formatter.
 /// <param name="args">The args.
 public static string ToFormattedString(this string template, 
	IFormatProvider formatter, params object[] args)
 {
     if (string.IsNullOrEmpty(template)) return string.Empty;
     return string.Format(formatter, template, args);
 }

Now the above example becomes:

 string formatted = "Formatted text {0:-15} 
	example generated on {1:d}".ToFormattedString(meaningfulString, DateTime.Now);

It’s definitely an improvement and the important bit of the statement (the template with formatting) is right at the front for easy debugging.

Excellent, How Do I Retrofit This Into My Existing Code?

Good question, glad you asked.  I simply used Visual Studio's Find and Replace using regular expressions:

image

The find regex (using VS’s “special” regex format) is:

string.Format\(CultureInfo.InvariantCulture,:b*{:q|:i}:b@,:b@

The replace regex is:

\1.ToFormattedString(

Obviously, you'll also need a ‘using’ statement at the top of your class file with the namespace of the static class containing the extension methods.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Martin Jarvis

Software Developer (Senior)
Freestyle Interactive Ltd
United Kingdom United Kingdom

Member

Follow on Twitter Follow on Twitter
I'm a lead developer for Freestyle Interactive Ltd where we create many wonderful websites built on Microsofts ASP.Net and Ektron CMS.
 
I've been developing .Net applications (both Windows and Web) since 2002.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 PinmemberEugene Sichkar23:56 15 Jul '10  
GeneralRe: My vote of 1 PinmemberMartin Jarvis11:17 3 Aug '10  
GeneralMy vote of 5 PinmemberDarchangel9:50 6 Jul '10  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120517.1 | Last Updated 3 Jul 2010
Article Copyright 2010 by Martin Jarvis
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid