I want to be able to access property values in an object like a dictionary, using the name of the property as a key. I don’t really care if the values are returned as objects, so Dictionary<string, object> is fine. This is the intended usage:
object person = new { Name: "Bob", Age: 45 };
IDictionary<string, object> lookup = new PropertyDictionary(person);
string name = (string)person["Name"];
person["Age"] = (int)person["Age"] + 1; // potentially editable
I was about to implement my own class for this, but then I started noticing classes like DynamicObject implement the IDictionary interface, which made think this was already being done for me somewhere.
What I want is similar to the functionality used by ASP.NET MVC that allows using anonymous types to set HTML tag attributes. I have a lot of classes that use dictionaries as data sources, but most of the time I should be able to pass in objects as well.
Since this is for a general-purpose library, I thought I would create a reusable class that simply decorated an object with the IDictionary interface. It will save me from creating an explosion of overloads.
I don’t believe there is a built-in .Net type like this already in the .Net framework. It seems like you really want to create an object that behaves a lot like a Javascript object. If so then deriving from
DynamicObjectmay be the right choice. It allows you to create an object which when wrapped withdynamicallows you to bind directlyobj.Nameor via the indexerobj["Name"].You can use this to wrap any type and use both the indexer and name syntax to get the properties