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

C# 有没有一种方法可以使用字符串在循环中声明新变量?,c#,C#,我需要将一个匹配项中的7项设置为7个字符串,所以不要这样做 var item0=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item0.ToString()).FirstOrDefault().Key; var item1=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item1.ToString()).FirstOrDefault().Key;

我需要将一个匹配项中的7项设置为7个字符串,所以不要这样做

var item0=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item0.ToString()).FirstOrDefault().Key;
var item1=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item1.ToString()).FirstOrDefault().Key;
var item2=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item2.ToString()).FirstOrDefault().Key;
var item3=items.Data.Where(p=>p.Key.Equals(匹配[i].participantNum.stats.item3.ToString()).FirstOrDefault().Key;
//...
我想在这样的for循环中做一些更简单的事情

string[]itemsList=新字符串[7];
对于(int j=0;jp.Key.Equals(匹配[i].participantNum.stats.nextItem.ToString()).FirstOrDefault().Key;//问题在这里
}

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

您可以使用反射。即:

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:"";
}
string[]itemsList=新字符串[7];
var stats=matches[i]。参与者[participantNum]。统计信息;
对于(int j=0;jp.Key.Equals(nextItem)).FirstOrDefault();//问题就在这里
itemsList[j]=(v!=null)?v.Key:;
}

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

字典是您的朋友。您是否尝试使用var nextItem=$“Item{j}”?@Mosia这会有什么影响?它仍将被编译为
string nextItem=
,也不清楚您在循环中尝试在何处使用nextItem,因为在该Linq上可见的nextItem似乎是另一个对象的属性。每当您开始创建末尾带有数字的变量或属性时,这都是您应该使用的一个很好的指示而是某种类型的集合。项目列表是一个问题,我用json文本获取数据,不能很好地转换它。但是谢谢你的帮助!