检查对象列表是否包含具有特定值的属性
说我有以下代码:
class SampleClass { public int Id {get; set;} public int Name {get; set;} } List<SampleClass> myList = new List<SampleClass>(); //list is filled with objects ... string nameToExtract = "test";
所以我的问题是我可以使用什么List函数从myList
提取具有与我的nameToExtract
string匹配的Name属性的对象。
如果这个问题真的很简单/明显,我很抱歉。
您可以使用Enumerable.Where扩展方法:
var matches = myList.Where(p => p.Name == nameToExtract);
返回一个IEnumerable<SampleClass>
。 假设你想要一个过滤的List
,只需在上面调用.ToList()
即可。
顺便说一下,如果我今天编写代码,考虑到Unicodestring处理的复杂性,我会进行不同的等式检查:
var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
也可以看看
myList.Where(item=>item.Name == nameToExtract)
using System.Linq; list.Where(x=> x.Name == nameToExtract);
编辑:误读问题(现在所有比赛)
除了build议LINQ的其他答案之外,在这种情况下的另一种select是使用FindAll
实例方法:
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
你应该看看Reflection API。 这是一个带有关于类本身信息的元名称空间。 你可以问接口inheritance和一切。
http://msdn.microsoft.com/en-us/library/z919e8tw%28v=vs.80%29.aspx