有没有一种方法可以使用字符串在循环中声明新变量?

时间:2020-04-05 13:08:10

标签: c#

我需要将一个匹配项中的7个项设置为7个字符串,所以不要做类似的事情

var item0 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item0.ToString())).FirstOrDefault().Key;
var item1 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item1.ToString())).FirstOrDefault().Key;
var item2 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item2.ToString())).FirstOrDefault().Key;
var item3 = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.Item3.ToString())).FirstOrDefault().Key;
//...

我想在这样的for循环中做些简单的事情

string[] itemsList = new string[7];
for (int j = 0; j < itemsList.Length; j++)
    {
        string nextItem = $"Item{j}";
        itemsList[j] = items.Data.Where(p => p.Key.Equals(matches[i].Participants[participantNum].stats.nextItem.ToString())).FirstOrDefault().Key; //problem is here
    }

但是c#没意识到我正在尝试使用nextItem字符串。有没有一种方法可以使用字符串定义我想要的项目?

1 个答案:

答案 0 :(得分:1)

您可以使用反射。即:

string[] itemsList = new string[7];
var stats = matches[i].Participants[participantNum].stats;
for (int j = 0; j < itemsList.Length; j++)
{
    var nextItem = stats.GetType().GetProperty($"item{j}").GetValue(stats).ToString();
    var v = items.Data.Where(p => p.Key.Equals(nextItem)).FirstOrDefault(); //problem is here
    itemsList[j] = (v != null)?v.Key:"";
}

PS:可能是在模型中,您应该定义一个列表项,以便于操作。