Отражение: Получить свойства / поля из отдельных элементов списка <> - PullRequest
0 голосов
/ 29 октября 2018

Заранее прошу прощения за беспорядок, который вы собираетесь прочесть, потому что я не уверен на 100%, что я ищу.

Я создал всю систему пользовательского интерфейса, которая автоматически получает список свойств из различных скриптов / компонентов в GameObjects (Unity) и создает для них подходящий вариант ввода пользовательского интерфейса (например, float получает одну строку, Vector3 получает 3 строки , цвет получает что-то еще и т. д.).

Что входит в создание полей ввода пользовательского интерфейса - это Компонент (который мы хотим рассмотреть), в то время как отдельные созданные входы пользовательского интерфейса хранят это Имя компонента и свойства. Поэтому, когда ввод изменяется в одном из полей ввода, он устанавливает SetValue для свойства компонента. Теперь я также создал вариант, в котором мы указываем класс свойства и в основном перечисляем свойства свойства, поэтому входные данные пользовательского интерфейса хранят компонент, имя свойства и имя дочернего объекта и изменяют свойства как таковые. Все это хорошо работает.

Итак, теперь я ударил кирпичную стену списками. Я хотел бы рассматривать отдельные элементы списка как свойства, чтобы я мог передать их в мою существующую ранее схему пользовательского интерфейса.

tl; dr Обрабатывает ли List <> свои отдельные элементы как свойства, поля или зависит от ситуации? Как я могу получить эти свойства, поля или их соответствующие имена из этого списка, чтобы использовать их в моем беспорядке системы пользовательского интерфейса? 0 работа для меня означает обработку отдельных элементов Списка как свойств.

---------------------------- EDIT ----------------------------

Снова прошу прощения за этот беспорядок вопроса. Это смесь запутанной теории и описания существующей ситуации, которую я пытаюсь включить в свой уже существующий проект (который слишком сложен, чтобы его можно было легко привести к примеру).

Если кто-то понял, о чем я спрашиваю, то самым простым решением было создать свойство, которое перед перечислением было бы приравнено к элементу списка.

Пример выглядит примерно так:

public List<MyCustomClass> myCustomList;
[Listable("ForEdit")]
public myCustomClass myCustomPropertyForEdit
{
    get;
    set;
}

И перед тем, как удалить свойства класса myCustomPropertyForEdit (myCustomClass), я бы просто сделал:

myCustomPropertyForEdit = myCustomList[0]; //or whatever index is in question

Затем позже я бы сделал размышление о «myCustomPropertyForEdit» вместо myCustomList. Я очень сомневаюсь, что это когда-нибудь кому-нибудь поможет, потому что это больше касается того, как я создавал методы для перечисления свойств в моем пользовательском интерфейсе, но на всякий случай.

Ответы [ 2 ]

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

Список хранит ссылки на объекты, предоставляя индекс, вы получаете стандартную ссылку на объект, которую вы можете перейти к запросу, используя отражение (не делайте этого для самого списка, поскольку вы получите методы класса List, и ничего не связанного к тому, что содержится в списке)

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

, например:

public Class Tree
{
    public int branches;

    public Tree(int branch)
    {
        branches=branch;
    }
}

List<Tree> trees = new List<Tree>();
trees.Add(new Tree(3));

теперь в моем списке есть один элемент с индексом 0;

так что я могу сделать trees[0].branches;

для доступа к полям / реквизитам элемента в деревьях.

список не является массивом, он содержит фактический элемент, позволяющий ссылаться не только на объект, но и на его собственные уникальные переменные. пока они общедоступны в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...