How to Reference Class Properties with Strings Using ASP.NET Reflection

I often want to get (and less frequently set) the value of a class property using a string containing the property name rather than a standard dot reference. 





So instead of this: 





// the normal way
string Name = customer.Name




I want to be able to do this: 





// makes the class property look like a dictionary item
string Name = customer["Name"];




Or 





string ColumnName = "Name";
string Name = customer[ColumnName];




(Javascript aficionados will recognize this dual personality immediately, as it’s a natural behavior for javascript objects.)





You can add this dictionary-like capability to any class by adding the following indexer property. No changes are needed.





If you prefer, you can create a small class containing only the indexer property and then have other classes inherit it. That’s what I do in the example at https://dotnetfiddle.net/2klk3x. (See the IndexerProperty class.)





public object this[string propertyName]
{
get { return this.GetType().GetProperty(propertyName).GetValue(this); }
set { this.GetType().GetProperty(propertyName).SetValue(this, value); }
}




The dictionary syntax is especially helpful when using LINQ. Below is a small function that takes a list of customers and sorts it by SortColumn, a string holding the name of the column.





private List SortCustomers( customers, string SortColumn)
{
return customers.OrderBy(cust =>cust[SortColumn]).ToList();
}




WARNING: As usual when using reflection, don’t do it when speed is important. 





-30-

 •  0 comments  •  flag
Share on Twitter
Published on January 17, 2020 15:25
No comments have been added yet.