如何获取类字段名称的列表

时间:2020-10-01 16:58:26

标签: c# unity3d

抱歉,标题令人困惑,所以基本上我所拥有的是一个包含许多都是同一子类的对象的类。因此,我想知道从类中不同对象中获取所有名称的最佳方法是什么。

public class Champions
{
    public champ Aatrox;
    public champ Ahri;
    public champ Akali;
    public champ Alistar;
    public champ Amumu;
    public champ Anivia;
    public champ Annie;
    public champ Aphelios;
    public champ Ashe;
    public champ AurelionSol;
    public champ Azir;
    public champ Bard;
    public champ Blitzcrank;
    public champ Brand;
    public champ Braum;
    public champ Caitlyn;
}

public class champ
{
    public string version;
    public string id;
    public string key;
    public string name;
    public string title;
    public string blurb;
    public info info;
    public string[] tags;
    public string partype;
    public stats stats;
}

那么获取具有所有名称的列表的好功能是什么? 列表:Aatrox,Ahri ... Caitlyn

3 个答案:

答案 0 :(得分:0)

要访问类型的字段或属性,请使用reflection

var names = typeof(Champions) // get System.Type instance for Champions
    .GetFields()              // get all fields of this type
    .Select(x => x.Name)      // map to names
    .ToList();

答案 1 :(得分:0)

所以我开始工作了,谢谢大家的投入!

void Start()
{
    url = "http://ddragon.leagueoflegends.com/cdn/10.19.1/data/en_US/champion.json";
    StartCoroutine(GetChampions());

    Type myType = typeof(data);
    myField = myType.GetFields();

    SortIntoList();
}
 public void SortIntoList()
{
    int i = 0;
    while (i < 151)
    {
        string champstring = myField[i].ToString();

        string[] optionschampname = champstring.Split(' ');

        
        options.Add(optionschampname[1]);
        i++;

    }
}

答案 2 :(得分:0)

您已经回答过,可以使用反射。

或者您可以使用string作为键并将Champion这样的数据存储在Dictionary中:

Dictionary<string, Champion> dict = new Dictionary<string, Champion>()
{
    {"Aatrox", new Champ()},
    {"Ahri", new Champ()},
};

(由于编码惯例,我将champ重命名为Champion:类始终以大写开头,并且全名通常更易于使用)