Property bag for C# class

7.8k views Asked by At

Accessing c# class properties like javascript language would make life a lot easier.

How we can do it in C#?

For example:

someObject["Property"]="simple string";
Console.WriteLine(someObject["FirstName"]);
4

There are 4 answers

3
r.zarei On

Here is how you can enable property-bag-like functionality in your classes by adding a few lines of code:

partial class SomeClass
{
    private static readonly PropertyDescriptorCollection LogProps = TypeDescriptor.GetProperties(typeof(SomeClass));

    public object this[string propertyName]
    {
        get { return LogProps[propertyName].GetValue(this); }
        set { LogProps[propertyName].SetValue(this, value); }
    }
}
6
oleksii On

dynamic keyword can be used instead. Try yourself here

using System;
using System.Dynamic;
                    
public class Program
{
    public static void Main()
    {
        dynamic foo = new ExpandoObject();
        foo.Property = "simple string";
        Console.WriteLine(foo.Property);
    }
}
1
nvoigt On

You could derive every single class from Dictionary<string, object>. But then, you could simply take JavaScript instead of misusing C#.

0
OrganicCoder On

This code would work

dynamic user= new ExpandoObject();
user.name = "Anonymous";
user.id=1234
user.address="12 broad way"
user.State="NY"

import System.Dynamic namespace.