繁体   English   中英

如何检查一个项目是否存在于列表中并具有价值

[英]How to check if an item exist in list and has value

我有一个 model 类,如下所示

public class A
{
 public string Name{get;set;}
 public string Value{get;set;}
}
public class B
{
 public List<A>Items{get;set;}
}

下面的 json 将被反序列化为 class B

{
"Items":[
{
  "Name":"Food Name"
  "Value":"Fries"
},
{
  "Name":"Weapon Name"
  "Value":"Gun"
},
{
  "Name":"Vehicle Name"
  "Value":"Car"
},
{
  "Name":"Pet Name"
  "Value":"Mewto"
},
{
  "Name":"Personal Name"
  "Value":"Leo"
}]}

将值反序列化为 class B 后,我需要验证列表项是否包含名称食物名称、个人名称、武器名称和汽车名称,并且这些提到的项目的不是 null 或空。 最好的方法是什么?

尝试这个

var jsonParsed=JsonConvert.DeserializeObject<B>(json);
var names =new string[] {"Food Name","Personal Name","Weapon Name","Car Name" };

var valid=  jsonParsed.Items.Where(i=> names.Contains(i.Name) && !string.IsNullOrEmpty(i.Value))
.GroupBy(i=>i.Name).Count()==names.Length;

或者如果它只能是每个名称的一项,它可以更简单

var valid=  jsonParsed.Items.Count(i=> names.Contains(i.Name) && !string.IsNullOrEmpty(i.Value))==names.Length;

你可以用 go 来做类似的事情

List<A> Items = //however you get the list
string[] names = {"Food Name","Personal Name","Weapon Name", "Car Name"};
foreach (string s in names)
{
    var item = Items.FirstOrDefault(i => i.Name == s);
    if (item == null || String.IsNullOrWhiteSpace(item.Value))
    {
        // handle the missing data
        break;
    }
}

这可能是一个丑陋的解决方案,但它应该工作。 另请注意,这不会检查列表中的任何其他项目。 您可以拥有一个NameGeorgeValuePotato的项目,只要您还拥有名称正确的项目即可。

看起来你有很多可靠的解决方案。 我做了类似萨米的事情。 由于您要反序列化为 B,因此我创建了 List 来表示它。 不是最优雅的,但它有效。 希望你能找到适合你的东西

//Sample list
var newB = new B
{
    Items = new List<A>
    {
        new A{Name = "Food Name", Value = "Fries" },
        new A{Name = "Weapon Name", Value = "Gun" },
        new A{ Name = "Weapon Name", Value = "" },
    }
};


foreach (var item in newB.Items)
{
   string[] vals = { item.Name, item.Value };   

   if (String.IsNullOrEmpty(vals[0]) || String.IsNullOrEmpty(vals[1]))
  {
    //Handle missing vals
    Console.WriteLine("We have a missing val");
  }
  else
  {
     Console.WriteLine("Good to go");
  }

}
string[] mandatoryNames = { "Food Name", "Personal Name", "Weapon Name", "Car Name" };
var valid = mandatoryNames
    .All(mandatoryName => items
        .Any(item => item.Name == mandatoryName
                     && !string.IsNullOrEmpty(item.Value)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM