Я прочитал статью об объекте expando here, но я хочу достичь другой цели.
Я хочу, чтобы добавить объект свойства с динамическим свойством во время выполнения, поставить значение на него, а затем получить их позже:Как добавить свойство объекта на expando во время выполнения?
private static readonly ConditionalWeakTable<object, ExpandoObject> props = new ConditionalWeakTable<object, ExpandoObject>();
public static void AddDataExtension(this object key, dynamic value)
{
props.Add(key, value);
}
public static dynamic GetDataExtension(this object key)
{
ExpandoObject ex = null;
return props.TryGetValue(key, out ex);
}
Использование:
'Insert data at runtime'
instance.AddDataExtension("Hello", "hi");
'Get the data at runtime'
instance.GetDataExtension("Hello")
Но я получаю эту ошибку:
The best overloaded method match for 'System.Runtime.CompilerServices.ConditionalWeakTable<object,System.Dynamic.ExpandoObject>.Add(object, System.Dynamic.ExpandoObject)' has some invalid arguments
Я думаю, что неправильно использовал это свойство, этого можно достичь? если да, то как? Пожалуйста помоги.
Редактировать
вот полный класс:
public static class instance
{
private static readonly ConditionalWeakTable<object, ExpandoObject> props = new ConditionalWeakTable<object, ExpandoObject>();
public static void AddDataExtension(this object key, dynamic value)
{
props.Add(key, value);
}
public static dynamic GetDataExtension(this object key)
{
ExpandoObject ex = null;
return props.TryGetValue(key, out ex);
}
}
То, что я хочу, чтобы достичь это:
я буду иметь случайные varialbes, например, "photo_01, photo_12, photo_15, name_01, name_02, age_01, age_02
"
Если возможно Я хочу использовать метод таким образом:
id = <fetch from dbase>
instance.AddDataExtension("photo_" + id, byte[]);
А затем получить значение:
instance.GetDataExtension("photo_" + id)
Вы можете добавить больше информации о вашем проблема? Каков тип 'instance'? У вашего 'AddDataExtension' есть два аргумента, но вы вызываете его с помощью 3:' instance.AddDataExtension ("Hello", "hi") 'аргументы:' instance', '" Hello "', '" hi "' то же самое true для 'GetDataExtension'. И также неясно, чего вы пытаетесь достичь. – nemesv
См. Мое редактирование. Надеюсь, я объясню это хорошо. спасибо – fiberOptics
, что вы добавляете в словаре, не является ExpandoObject - вот почему вы получаете ошибку. И из ваших примеров не похоже, что вам нужен объект ExpandoObject вообще - вам просто нужен какой-либо объект (т. Е. System.Object). – Bond