首页 > 解决方案 > 使用 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)”

我知道我必须在这里应用递归,并且需要将成分列表放在括号之间,并且括号之间的每个成分都需要用逗号分隔。我真的似乎无法找到将这一切放在一起的方法......非常感谢任何帮助!

标签: c#

解决方案


使用一点 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;
    }

推荐阅读