У меня есть класс, который получает объект из других неизвестных модулей, и поэтому мне нужно отразить объект, чтобы получить его данные, вызвать его методы, и т.д.Ищете .NET ObjectReflector, который поможет мне упростить отображение объекта
чтобы упростить код, чтобы отразить на объекте, я строю этот класс:
using System;
namespace ApplicationCore.Helpers
{
class ObjectReflector
{
public object TheObject { get; set; }
public Type TheType { get; set; }
public ObjectReflector(object theObject)
{
TheObject = theObject;
TheType = theObject.GetType();
}
public string GetObjectShortName()
{
return TheObject.GetType().Name;
}
public string GetObjectLongName()
{
return TheObject.GetType().ToString();
}
public T GetPropertyValue<T>(string propertyName)
{
return (T)TheType.GetProperty(propertyName).GetValue(TheObject, null);
}
public T GetMethodValue<T>(string methodName, object[] parameters)
{
return (T)TheType.GetMethod(methodName).Invoke(TheObject, parameters);
}
}
}
Так что у меня есть хороший, чистый код, который выглядит следующим образом:
namespace ApplicationCore.Presenters
{
public class SmartFormPresenter
{
public UserControl View { get; set; }
public string ShortName { get; set; }
public string LongName { get; set; }
public string FirstName { get; set; }
public int Age { get; set; }
public int AgePlusTwo { get; set; }
public SmartFormPresenter(object o)
{
SmartFormView smartFormView = new SmartFormView();
View = smartFormView;
smartFormView.DataContext = this;
ObjectReflector or = new ObjectReflector(o);
ShortName = or.GetObjectShortName();
LongName = or.GetObjectLongName();
FirstName = or.GetPropertyValue<string>("FirstName");
Age = or.GetPropertyValue<int>("Age");
AgePlusTwo = or.GetMethodValue<int>("GetAgeInTwoYears", null);
}
}
}
Но теперь мне нужно разработать методы, например. зачитывать не INT но , так что я буду иметь, чтобы получить List<object>
, а затем отразить на «объект» и т.д.
Так что я имею в виду, что это было сделано раньше , Есть ли какой-либо инструмент или класс в .NET под названием ObjectReflector, который поможет мне упростить отражение объекта, как я делаю выше?
Я бы не использовал имена свойств и методов напрямую. Вместо этого используйте деревья выражений linq, чтобы избежать их. Это делает рефакторинг более безопасным. –
У меня есть имена методов и свойств в XML-файле в виде строк, которые мне нужно вызвать у моего неизвестного объекта. Как это будет работать в этом случае с деревьями выражений линга? –
Если я правильно понял, что вы хотите извлечь коллекцию из вашего неизвестного объекта, а затем, в свою очередь, подумать об объектах коллекции? –