我努力想要了解任何vs all和多选的逻辑 我有一个从Xelement映射的模型,我想检查多个属性是否有一个值(这是一个有效请求的指示器),但我的检查下面保持返回false(即使我知道他们有值)
if(!electronicObject.MetaData.All(x=> x.Name.ToLower() == "parcel id" ||
x.Name.ToLower() == "parcel type" || x.Name.ToLower() == "street name" ||
x.Name.ToLower() == "street designation" ||
x.Name.ToLower() == "parcel status"))
答案 0 :(得分:0)
在您的代码中,您正在检查元数据中的所有元素是否都被命名为" parcel id"," parcel type"," street name" ,"街道地址"或"包裹状态"。因此,如果您的元数据包含5个元素和1个元素,例如,调用"某些内容",则您的检查将失败。
您希望实现的目标是检查集合中是否有任何可用的属性:
if(electronicObject.MetaData.Any(x=> x.Name.ToLower() == "parcel id" ||
x.Name.ToLower() == "parcel type" ||
x.Name.ToLower() == "street name" ||
x.Name.ToLower() == "street designation" ||
x.Name.ToLower() == "parcel status"))
{
//your object is probably correct, as it has at least one correct metadata element.
}
即使对于未满的集合,此条件也将返回:" foo"," bar","街道地址"仍然是正确的。我不知道这是不是你想要的
答案 1 :(得分:0)
就像@CodingYoshi说的那样,您似乎更喜欢Any
而不是All
。
因此,您可以这样说:
var categories = new[]{
"parcel id",
"parcel type",
"street name",
"street designation",
"parcel status"
};
var condition = electronicObject.MetaData
.Any(x => categories.Contains(x.Name.ToLower()));
if(!condition)
{
//blah
}