My favorite method is the static member Format, which also can be turned into an extension method to be assigned to any class.
It first started with this Python code:
class Person(object): def __init__(self, name, age): self.name = name self.age = age def Format(self, format): return format.format(**self.__dict__) p = Person("Fred", 45) print p.Format("name={name}, age={age}")
With reflection and extension methods, I obtained this code, which I like.
You can define how to format the value of the properties (see the property BirthDay below).
And the method know hows to output nicely List<T>, Dictionary<K,V> and Array.
Person p = new Person() { LastName = "TORRES" , FirstName = "Frederic", BirthDay = new DateTime(1964,12, 11), DrivingLicenses = DS.List("Car", "Moto Bike") }; Console.WriteLine( // Call 4 properties in the format p.Format("FullName:'{LastName},{FirstName}', BirthDay:{BirthDay:MM/dd/yyyy}, DrivingLicenses:{DrivingLicenses}") ); //
Here is the output
FullName:'TORRES,Frederic', BirthDay:12/11/1964, DrivingLicenses:["Car", "Moto Bike"]
You can also format based on a dictionary, like this
var format = "LastName:{LastName}, FirstName:{FirstName}, Age:{Age:000}"; var Values = new Dictionary<string, object>() { { "LastName" , "TORRES" }, { "FirstName", "Frederic" }, { "Age" , 45 } }; Console.WriteLine(ExtendedFormat.Format(format, Values));
And while I was at it, I added support for the ExpandoObject, which make this kind of simple formatting more concise
var format = "LastName:{LastName}, FirstName:{FirstName}, Age:{Age:000}"; dynamic bag = new ExpandoObject(); bag.LastName = "TORRES"; bag.FirstName = "Frederic"; bag.Age = 45; Console.WriteLine(ExtendedFormat.Format(format, bag)); //
No comments:
Post a Comment