Отражение: Получить / установить значение свойства PropertyType - PullRequest
0 голосов
/ 20 октября 2018

Итак, я все еще автоматизирую свои данные чтения в пользовательском интерфейсе (работающем с Unity), и ситуация такова: в GameObject у меня есть скрипт, в котором я храню переменные / свойства с их аккуратно отсортированными атрибутами.Я читаю их через отражение, например:

public void insertAllFromGameObject(GameObject target, List<Type> types)
{
    var components  = target.GetComponents<Component>();
    foreach (var component in components)
    {
        if(types.Contains(component.GetType()))
        {
            var properties = component.GetType().GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
            foreach(var p in properties)
            {
                Debug.Log("VALUE: "+p.GetValue(component, null));

Это работает.Теперь, скажем, у меня есть свойство, в котором я хочу достичь пика в своем классе, вместо этого перечислить его свойства со значениями, установленными в этом конкретном свойстве, и потенциально изменить их одно за другим для этого свойства.

Я получил какчто касается перечисления, но не могу понять, что передать в качестве аргумента в GetValue.Пример:

public void insertAllFromVariable(GameObject target, List<Type> types, string propertyName)
{
    var components  = target.GetComponents<Component>();
    foreach (var component in components)
    {
        if(types.Contains(component.GetType()))
        {
            var property = component.GetType().GetProperty(propertyName);

            var propertysProperties = property.PropertyType.GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
            foreach(var p in propertysProperties)
            {
                Debug.Log("VALUE: "+p.GetValue(component, null));

Эта последняя строка является проблемой, потому что, конечно, я не ищу ее в «компоненте» (а скорее в свойстве внутри компонента) - но что я должен передать в немчтобы он отражал значения моей переменной?

1 Ответ

0 голосов
/ 20 октября 2018

Изменен ваш код, конечно, у меня нет запущенного кода, но концепция должна быть вам ясна:

public void insertAllFromVariable(GameObject target, List<Type> types, string propertyName)
        {
            var components = target.GetComponents<Component>();
            foreach (var component in components)
            {
                if (types.Contains(component.GetType()))
                {
                    PropertyInfo property = component.GetType().GetProperty(propertyName);
                    object theRealObject = property.GetValue(component);

                    PropertyInfo[] propertysProperties = theRealObject.GetType().GetProperties().Where(t => t.GetCustomAttributes<ListableAttribute>().Count() > 0);
                    foreach (PropertyInfo p in propertysProperties)
                    {
                        Debug.Log("VALUE: " + p.GetValue(theRealObject));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...