no need to write a huge switch statement to make a run time decision
Imagine you have an Object with 50 properties, and at runtime, you only need to change the value of one of them. You could write a switch statement to run through all of them, but there is a better way. This is how it would be done with a switch:switch(propertyName)
{
case "Name": obj.Name = newVal; break;
case "Phone": obj.Phone = newVal; break;
///and so on...
That sounds like a terrible idea. With Reflection, it was easy to build an extension to update any object with a new value at runtime (provided it can be written to) with the following code:
public static void SetPropertyValue(this object o,
string propertyName, object newValue)
{
PropertyInfo pi;
pi = o.GetType().GetProperty(propertyName);
if (pi == null)
throw new Exception("No Property [" +
propertyName + "] in Object [" +
o.GetType().ToString() + "]");
if (!pi.CanWrite)
throw new Exception("Property [" +
propertyName + "] in Object [" +
o.GetType().ToString() +
"] does not allow writes");
pi.SetValue(o, newValue, null);
}
Now, instead of that 50+ line mess above, all you need to do to change the "Phone" property to 'newVal' is:
obj.SetPropertyValue("Phone", newVal);
I added this to my Naspinski.Utilities Set on CodePlex as well.