Можно ли добавлять атрибуты к свойству среды выполнения динамического объекта?

Я хочу добавить атрибут к свойству среды выполнения динамического объекта / объекта expando, возможно ли это?

Я бы хотел:

dynamic myExpando = new ExpandoObject();
myExpando.SomeProp = "string";
myExpando.AddAttribute("SomeProp", new MyAttribute());

Возможно ли это так или иначе?


person Tomas Jansson    schedule 11.12.2013    source источник
comment
почему бы вам не запустить этот код и не посмотреть?   -  person Sam I am says Reinstate Monica    schedule 12.12.2013
comment
Вы проверили TypeDescriptor? msdn.microsoft.com/ en-us / library /   -  person Matthew    schedule 12.12.2013
comment
@SamIam: Я не думаю, что он ожидает, что это сработает, но, если быть точным, нет. Это не работает. Результат такой: RuntimeBinderException: 'System.Dynamic.ExpandoObject' does not contain a definition for 'AddAttribute'   -  person recursive    schedule 12.12.2013
comment
stackoverflow.com/questions/563548/ также может помочь   -  person Matthew    schedule 12.12.2013
comment
@ user2720372: Не дубликат. Это не помогает с атрибутами.   -  person recursive    schedule 12.12.2013


Ответы (1)


Вы можете добавить атрибут к динамическому объекту следующим образом:

 dynamic myExpando = new ExpandoObject();
            myExpando.SomeProp = "string";
            TypeDescriptor.AddAttributes(myExpando, new SerializableAttribute());

Чтобы прочитать атрибуты, вы должны использовать это:

 dynamic values = TypeDescriptor.GetAttributes(myExpando);
            for (int i = 0; i < values.Count; i++)
            {
                System.Console.WriteLine(values[i]);
            }

Я не уверен, что вы можете читать подобные настраиваемые атрибуты. Однако вы также можете попробовать отражение:

 System.Reflection.MemberInfo info = myExpando.GetType();
            object[] attributes = info.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
                System.Console.WriteLine(attributes[i]);
            }

Однако с отражением вы не можете увидеть добавленный атрибут, потому что атрибуты являются статическими метаданными.

TypeDescriptor - это механизм метаданных, предоставляемый .NET FCL. Вы можете прочитать статью здесь:

http://blogs.msdn.com/b/parthopdas/archive/2006/01/03/509103.aspx

person Bura Chuhadar    schedule 11.12.2013
comment
Но это добавление свойства к типу, а не к свойству. - person Tomas Jansson; 12.12.2013