我需要将一个匹配项中的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字符串。有没有一种方法可以使用字符串定义我想要的项目?
答案 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:可能是在模型中,您应该定义一个列表项,以便于操作。