反射:从List <>

时间:2018-10-29 13:14:30

标签: c# unity3d reflection

对于您将要阅读的烂摊子,我感到非常抱歉,因为我不确定100%正在寻找什么。

我创建了一个完整的UI系统,该系统会自动从GameObjects(Unity)上的各种脚本/组件中获取属性列表,并为其创建合适的UI输入变量(例如,float获得单行,Vector3获得3行,颜色还会有其他变化等等。

用于创建UI输入字段的是一个组件(我们要研究),而单独创建的UI输入则存储此组件和属性名称。因此,当输入在输入字段之一中更改时,它将对组件的属性执行SetValue。现在,我还创建了一个变体,其中我们进入了属性的类并基本上列出了属性的属性,因此UI输入存储了Component,Property Name和subProperty的Name并修改了属性。所有这些都很好。

所以,现在我用List撞墙了。我想将列表中的各个元素视为属性,以便可以将它们传递到我先前存在的UI方案中。

tl; dr List <>会将其单个元素视为“属性”,“字段”还是取决于情况?如何从此列表中获取这些属性,字段或它们各自的名称,以便将它们与UI系统混在一起使用?对我来说0工作意味着将List的各个元素视为属性。

---------------------------- 编辑----------------------------

同样,对于这个问题我很抱歉。我试图把我的现有项目塞入一个已经存在的项目中,这是一个混乱的理论和一个描述的混合体(这有点太过容易理解了。)

如果有人能理解我的要求,那么最简单的解决方案就是创建一个属性,该属性在列表之前等于列表的元素。

示例看起来像这样:

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

在撤消myCustomPropertyForEdit的类(myCustomClass)的属性之前,我只需做以下事情:

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

然后,稍后我将对“ myCustomPropertyForEdit”而不是myCustomList进行反思。我非常怀疑这对任何人都不会有帮助,因为它更多地涉及到我如何构建将属性列表到UI中的方法,但这只是为了以防万一。

2 个答案:

答案 0 :(得分:2)

List通过提供一个索引来存储对对象的引用,您可以获得标准的对象引用,您可以使用反射进行查询(不要针对列表本身进行查询,因为您将获得List类的方法,并且不相关到列表中包含的内容)

答案 1 :(得分:1)

例如:

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;

访问树中元素的字段/属性。

list不是数组,它包含实际项目,不仅可以引用对象,还可以引用其自身的唯一变量。只要他们在班上是公开的。