Есть ли способ построить объект Expando из базового класса non-expandoObject?
Другими словами, я пытаюсь сделать что-то вроде:
// Instantiate my Expando object
dynamic myDynamicObject = new ExpandoObject();
// Add some base class to it - SomeBaseClass() can contain anything (Properties and methods)
myDynamicObject = Add SomeBaseClass(); ???
// Add some other properties that are not in the base class
myDynamicObject.Name = "My Dynamic Object";
// Add some methods
myDynamicObject.SomeMethods = (Func<bool>)(() => {
return true;
});
РЕДАКТИРОВАТЬ
Как предложено Мартином, мы можем создать Expando из другого объекта в соответствии с этим stackoverflow thread . Вот что они делают:
public static dynamic ToDynamic<T>(this T obj)
{
IDictionary<string, object> expando = new ExpandoObject();
foreach (var propertyInfo in typeof(T).GetProperties())
{
var currentValue = propertyInfo.GetValue(obj);
expando.Add(propertyInfo.Name, currentValue);
}
return expando as ExpandoObject;
}
Однако этот пример заботится только о свойствах, но мне также нужны методы.
Итак, я попытался сделать что-то похожее для методов, но я не совсем понимаю, что я здесь делаю:
public static dynamic ToDynamic<T>(this T obj)
{
IDictionary<string, object> expando = new ExpandoObject();
MethodInfo[] info = typeof(T).GetMethods();
foreach (var methodInfo in info)
{
if (methodInfo != null)
{
var currentMethod = methodInfo.GetMethodBody();
expando.Add(methodInfo.Name, currentMethod);
}
}
return expando as ExpandoObject;
}
Но затем, при попытке выполнить методы, я получаю это ошибка:
An unhandled exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in Unknown Module.
Дополнительная информация: невозможно вызвать тип без делегата