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)