C# 如何验证对象列表中的值?
我有一个C# 如何验证对象列表中的值?,c#,list,linq-to-objects,C#,List,Linq To Objects,我有一个列表。 类ObjectA有两个属性-字符串属性1bool?物业2 [1] 我需要遍历整个列表,以检查property1是否包含一个特定的字符串,比如“xyz” [2] 我需要检查property2的值是否为真(我相信在知道如何处理[1]之后我可以计算出来) 谢谢 Adarsh如果要确保特定集合的所有元素是否满足某个条件,可以在Linq中使用all方法,如下所示: new List<MyClass>().All(m => m.StringProp.Contains("s
列表
。
类ObjectA有两个属性-字符串属性1
bool?物业2
[1] 我需要遍历整个列表,以检查property1是否包含一个特定的字符串,比如“xyz”
[2] 我需要检查property2的值是否为真(我相信在知道如何处理[1]之后我可以计算出来)
谢谢
Adarsh如果要确保特定集合的所有元素是否满足某个条件,可以在Linq中使用all方法,如下所示:
new List<MyClass>().All(m => m.StringProp.Contains("ss") && m.IsValid == true)
new List().All(m=>m.StringProp.Contains(“ss”)&&m.IsValid==true)
如果要确保特定集合的所有元素是否满足某个条件,可以在Linq中使用all方法,如下所示:
new List<MyClass>().All(m => m.StringProp.Contains("ss") && m.IsValid == true)
new List().All(m=>m.StringProp.Contains(“ss”)&&m.IsValid==true)
使用LINQ:
List<ObjectA> list;
//Check for string
if (list.Any(a => a.property1.Contains("xyz")))
{
}
// Check for true
if (list.Any(a => a.property2 ?? false))
{
}
列表;
//检查字符串
if(list.Any(a=>a.property1.Contains(“xyz”))
{
}
//检查是否正确
if(list.Any(a=>a.property2??false))
{
}
如果需要获取满足条件的对象,请使用list。其中(…)使用LINQ:
List<ObjectA> list;
//Check for string
if (list.Any(a => a.property1.Contains("xyz")))
{
}
// Check for true
if (list.Any(a => a.property2 ?? false))
{
}
列表;
//检查字符串
if(list.Any(a=>a.property1.Contains(“xyz”))
{
}
//检查是否正确
if(list.Any(a=>a.property2??false))
{
}
如果需要获取满足条件的对象,请使用list。其中(…)与list
一起,也可以使用其方法:
这将适用于.NET>=2.0的任何版本。您也可以按照@Hassan的建议使用LINQ:
bool valid = list.All(a => a.property1.Contains("xyz") && a.property2);
这将在.NET>=3.5上运行。此选项的好处是能够处理任何可枚举源(即,如果您将列表更改为ICollection或其他可枚举类型)。使用列表
还可以使用其方法:
这将适用于.NET>=2.0的任何版本。您也可以按照@Hassan的建议使用LINQ:
bool valid = list.All(a => a.property1.Contains("xyz") && a.property2);
这将在.NET>=3.5上运行。此选项的好处是能够处理任何可枚举源(即,如果要将列表更改为ICollection或其他可枚举类型)。有几种可能的检查和结果,您可以轻松获得
void Main()
{ //ignore Dump() method
var list = new List<ObjectA>()
{
new ObjectA("name1", true),
new ObjectA("name2", true),
new ObjectA("name3", null),
new ObjectA("name4", false),
new ObjectA("name5", null),
new ObjectA("name6", false),
new ObjectA("name7", true)
};
//check if all Items are valid
var allItems = list.All(m => m.Name.Contains("ss") && m.valid == true); // false
//only get valid items (name contains name AND true)
var validItems = list.Where (l => l.Name.Contains("name") && l.valid == true).Dump();
//get all items which are invalid
var nonvalidItems = list.Where(l =>!(l.Name.Contains("name")) || l.valid != true).Dump();
有几种可能的检查和结果,你可以很容易地得到
void Main()
{ //ignore Dump() method
var list = new List<ObjectA>()
{
new ObjectA("name1", true),
new ObjectA("name2", true),
new ObjectA("name3", null),
new ObjectA("name4", false),
new ObjectA("name5", null),
new ObjectA("name6", false),
new ObjectA("name7", true)
};
//check if all Items are valid
var allItems = list.All(m => m.Name.Contains("ss") && m.valid == true); // false
//only get valid items (name contains name AND true)
var validItems = list.Where (l => l.Name.Contains("name") && l.valid == true).Dump();
//get all items which are invalid
var nonvalidItems = list.Where(l =>!(l.Name.Contains("name")) || l.valid != true).Dump();
这将返回bool true或false?这将返回bool true或false?如果我必须将另一个条件与一个内部列表exlist()进行比较,该怎么办?所有(m=>m.StringProp.Contains(“ss”)&&(m.IsValid==true&&somelclvrblval==1))?这行得通吗?@AdarshK是的,行得通。您只需传递在测试列表项后返回布尔值的谓词。边注-如果条件相当复杂,那么你可以考虑使用不确定我得到你-“在测试列表项之后返回布尔值的PASS谓词”@ AdHSKE谓词是委托<代码> FUNC——即任何接受T(在这种情况下从列表中的项)返回布尔值的方法。它可以是如上所述的匿名方法,也可以是命名方法,如
private bool IsValid(ObjectA a a){return a.property2;}
您可以传递此方法list.TrueForAll(IsValid)
如果我必须将另一个条件与列表中的一个条件exlist()进行比较,该怎么办(m.IsValid==true&&somelclvrblval==1))“这是可行的吗?”AdHSKK是的,它会起作用。你应该通过测试列表项后返回布尔值的谓词。边注-如果条件相当复杂,那么你可以考虑使用不确定我得到你-“在测试列表项之后返回布尔值的PASS谓词”@ AdHSKE谓词是委托<代码> FUNC< /代码>。任何接受T(本例中为列表中的项)并返回布尔值的方法。它可以是如上所述的匿名方法,也可以是命名方法,如private bool IsValid(ObjectA a a){return a.property2;}
您可以传递此方法list.TrueForAll(IsValid)