1

c# または VB でループから動的に変数を呼び出す方法はありますか? すべての変数を 1 つずつ処理する代わりに?

次の例を想像してみてください。dog1Legs、dog2Legs、dog3Legs を設定したいのですが、それらをループから呼び出す方法はありますか?

String dog1Legs;
String dog2Legs;
String dog3Legs;

for(int i=1; i<4; i++)
{

    dog(i)Legs = "test";
}
4

3 に答える 3

6

コードを次のように書く必要はありません

String dog1Legs;
String dog2Legs;
String dog3Legs;

for (int i=1; i<4; i++)
{
    FieldInfo z = this.GetType().GetField("dog" + i + "Legs");
    object p = (object)this;     
    z.SetValue(p, "test");
}
于 2013-04-27T12:05:08.857 に答える
3

配列またはリストを使用する必要があります。例えば

var dogLegs = new String[3];

for(int i=0; i<dogLegs.Length; i++)
{
    dogLegs[i] = "test";
}

または、Dogクラスを作成することは理にかなっているかもしれません。

void Main()
{
    var dogs = new List<Dog>();
    dogs.Add(new Dog { Name = "Max", Breed = "Mutt", Legs = 4 });
    foreach (var dog in dogs)
    {
        // do something
    }
}

class Dog
{
    public int Legs { get; set; }
    public string Breed { get; set; }
    public string Name { get; set; }
}
于 2013-04-27T11:44:42.960 に答える
1

いいえ、できません。典型的な解決策は辞書です:

  Dictionary<String, String> dogs = new Dictionary<String, String>();

  dogs.Add("dog1Legs", null);
  dogs.Add("dog2Legs", null);
  dogs.Add("dog3Legs", null);

  for(int i = 1; i < 4; i++) {
    dogs["dogs" + i.ToString() + "Legs"] = "test";
  }
于 2013-04-27T11:49:53.610 に答える