说我有以下代码:
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
字符串匹配的Name属性的对象。
如果这个问题非常简单/明显,我会事先道歉。
答案 0 :(得分:84)
您可以使用Enumerable.Where扩展名方法:
var matches = myList.Where(p => p.Name == nameToExtract);
返回IEnumerable<SampleClass>
。假设您想要过滤List
,只需在上面调用.ToList()
。
顺便说一句,如果我今天编写上面的代码,考虑到Unicode字符串处理的复杂性,我会以不同的方式进行相等检查:
var matches = myList.Where(p => String.Equals(p.Name, nameToExtract, StringComparison.CurrentCulture));
答案 1 :(得分:8)
myList.Where(item=>item.Name == nameToExtract)
答案 2 :(得分:1)
using System.Linq;
list.Where(x=> x.Name == nameToExtract);
编辑:误读问题(现在所有匹配)
答案 3 :(得分:1)
除了建议LINQ的其他答案之外,在这种情况下另一种选择是使用FindAll
实例方法:
List<SampleClass> results = myList.FindAll(x => x.Name == nameToExtract);
答案 4 :(得分:-2)
您应该查看Reflection API。这是一个元命名空间,包含有关类本身的信息。您可以询问接口继承和所有内容。
http://msdn.microsoft.com/en-us/library/z919e8tw%28v=vs.80%29.aspx