gpt4 book ai didi

c# - 简化 C# 中的多个(非嵌套)foreach 循环

转载 作者:行者123 更新时间:2023-12-04 10:46:23 25 4
gpt4 key购买 nike

我有一个 JSON 对象:

"Cars": {
"Honda": {
"CRV": [

{ "index": 1, "Color": "Black" },
{ "index": 2, "Color": "White" }

],
"Civic": [

{ "index": 1, "Color": "Blue" }

]
},
"Toyota": {
"Corolla": [

{ "index": 1, "Color": "Black" }

],
"Camry": [

{ "index": 1, "Color": "Blue" }

]
},
"GM": {
"Chevrolet": {

"Cruze": [

{ "index": 1, "Color": "Blue" }

]

}
}

我必须将此信息存储在表中。现在我正在为每个循环单独解析每个列表,如下所示:
 foreach (CarInfo info in Cars.Honda.CRV)
{
//storing in table
}
foreach (CarInfo info in Cars.Honda.Civic)
{
//storing in table
}
foreach (CarInfo info in Cars.Toyota.Corolla)
{
//storing in table
}

等等。
有没有办法优化这段代码? (给出的只是一个例子,实际的 JSON 更广泛,让我写了太多的 foreach 循环)

将信息存储在表中的方法因汽车品牌而异。

最佳答案

由于您无法控制输入的 JSON,这里有一种类似于我上次推荐的方法来解析传入的 JSON,包括对 GM 子模型的支持。

static void Main(string[] args)
{
// parse the JSON results of the API Call
JObject apiResult = JObject.Parse(File.ReadAllText("JsonBlock.json"));
// iterate through the models
foreach (var model in apiResult["Cars"].Children<JProperty>().Select(i => i.Name))
// GM cars have a submodel
if(model.Equals("GM",StringComparison.CurrentCultureIgnoreCase))
{
foreach (var submodel in apiResult["Cars"][model].Children<JProperty>().Select(i => i.Name))
AddCar(submodel,apiResult["Cars"][model][submodel]);
}
else
AddCar(model,apiResult["Cars"][model]);
}

static void AddCar(string model, JToken cars)
{
switch(model)
{
case "Honda":
// do honda things
break;
case "Toyota":
// do toyota things
break;
case "Chevrolet":
// do chevy things
break;
default:
throw new NotImplementedException();
}
}

关于c# - 简化 C# 中的多个(非嵌套)foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com