Получить значения свойства в C #

Очень хорошо, я возлюсь с API LoL. Онлайн MOBA. Оказывается, я хочу получить все идентификаторы чемпионов игры с их соответствующими именами , но каждый чемпион - это объект, поэтому я не могу придумать человеческий способ получить все IDS, не ставя их в линию линия.

Например:

Champion campeones;
string id = "";
id = campeones.data.Taric.id;
id = campeones.data.Akali.id;

Есть ли способ получить все объекты champions.data и затем получить доступ к их IDS и Именам? Я думал это:

Что-то вроде этого:

Champion campeones;
string[] champsId = new string[141];
string[] champsName = new string[141];

for(int i = 0; i < 141; i++) {
    champsId[i] = campeones.data.*.id;
    champsName[i] = campeones.data.*.name;
}

Подставляя * для имени объекта. Заранее спасибо!

2
задан 27.11.2019, 06:32
1 ответ

Классы, должно быть, очень похожие на что-то, как что он остается:

class Target
{
   public int Id { get; set; }
   public string Nombre { get; set; }
}

class Data
{
   public int idData { get; set; }
   public Target Taric { get; set; }
   public Target Akali { get; set; }

   public Data()
   {
      Taric = new Target();
      Akali = new Target();
   }
}


class Champion
{
   public Data data { get; set; }

   public Champion()
   {
       data = new Data();
   }
}

Принимая во внимание это, ты мог бы получать все свойства датируй используя reflection из следующего способа:

   Champion campeones = new Champion();

   int numeroPropiedades = campeones.data.GetType().GetProperties().Count();

   for (int i = 0; i < numeroPropiedades; i++)
   {
       var propertyInfo = campeones.data.GetType().GetProperties()[i];

       // Filtras los tipos porque podría haber propiedades
       // que no sean las que deseas (en este caso idData que es un entero)
       if(propertyInfo.PropertyType == typeof(Target))
       {
           var property = propertyInfo.GetValue(campeones.data, null) as Target;
           var id = property.Id;
           var name = property.Nombre;
        }
    }

Принимает во внимание, что я даю из-за факта, что свойства твоего интереса (которые они содержат, пойдите, и ямс) они того же типа (в моем примере Target), если это не было так, внутри if ты был бы должен использовать условие, которое соответствовало твоей реальности для того, чтобы не будет происходить Exception. Также, ты был бы должен санкционировать null, и т.д.

Я Использовал for для того, чтобы ты видел, как оно функционировало reflection , но ты мог бы использовать foreach и нарушать какие-то шаги:

   Champion campeones = new Champion();

   foreach (var propertyInfo in campeones.data.GetType().GetProperties())
   {
       // Filtras los tipos porque podría haber propiedades
       // que no sean las que deseas (en este caso idData)
       if (propertyInfo.PropertyType == typeof(Target))
       {
           var property = propertyInfo.GetValue(campeones.data, null) as Target;
           var id = property.Id;
           var name = property.Nombre;
        }
    }
2
ответ дан 01.12.2019, 10:46
  • 1
    Большое спасибо Карлос. Despué s многих часов ища, encontré краткое изложение со всеми чемпионами с Вашими свойствами в формате JSON в array. Так или иначе я благодарен за твой ответ и принимаю к сведению это для будущего. Большое спасибо! :) – Marc Guillem 28.11.2019, 19:08