c# - 使用 ToString() 从具有嵌套的模型中获取单个字符串
问题描述
这是模型的外观:
public class Ingredient
{
public string Name { get; set; }
public decimal? Percentage { get; set; }
public List<Ingredient> Ingredients { get; set; }
public Ingredient(string name, decimal? percentage)
{
Name = name;
Percentage = percentage;
Ingredients = new List<Ingredient>();
}
public override String ToString()
{
string temp = Name;
if(Percentage.HasValue)
{
temp = temp + " " + Percentage.ToString() + "%";
}
return temp;
}
}
这是 JSON 格式的数据:
{
"name":"paneermeel",
"percentage":null,
"allergen":false,
"ingredients":[
{
"name":"tarwebloem",
"percentage":null,
"allergen":true,
"ingredients":[
]
},
{
"name":"kleurstoffen",
"percentage":null,
"allergen":false,
"ingredients":[
{
"name":"karamel",
"percentage":null,
"allergen":false,
"ingredients":[
]
},
{
"name":"annatto norbixine",
"percentage":null,
"allergen":false,
"ingredients":[
]
}
]
},
{
"name":"zout",
"percentage":null,
"allergen":false,
"ingredients":[
]
}
]
}
我想要的是,当我在父节点(在本例中为“paneermeel”)上调用 ToString() 方法时,它应该返回以下内容:“paneermeel (tarwebloem, kleurstoffen (karamel, annatto norbixine), zout)”
我知道我必须在这里应用递归,并且需要将成分列表放在括号之间,并且括号之间的每个成分都需要用逗号分隔。我真的似乎无法找到将这一切放在一起的方法......非常感谢任何帮助!
解决方案
使用一点 LINQ 来检查成分列表是否包含任何内容,以及一个简单的 String.Join,这就是有效的 ToString()。
public override String ToString()
{
string temp = Name;
if(Percentage.HasValue)
{
temp = temp + " " + Percentage.ToString() + "%";
}
if (Ingredients.Any()) {
temp = temp + " (" + String.Join(", ", Ingredients) + ")";
}
return temp;
}
推荐阅读
- ruby-on-rails - 未定义的方法“card_number”
- angular - 无法安装 Angular Cli
- amazon-web-services - PowerShell中需要AWS cli移动中的大小写敏感性
- c# - 如何为 Hangfire 的 mySQL 数据库设置“connectionString”?
- javascript - 更改 React 父组件状态
- javascript - 使用 appendChild 将图像添加到元素会产生错误
- android - 使用 ConstraintSet 以编程方式向视图添加约束不会在 Android 中给出预期结果?
- r - 如何在 R 中删除包含任何非字母字符(连字符和撇号除外)的单词
- algorithm - 检测 stl 网格文件中的特征
- docker - 如何在正在运行的 docker 容器中配置自动启动服务 [nginx]