我有一个List<>在我的程序中,填充了我的自定义类。我希望能够通过简单地指定一个整数从列表中提取一个对象,然后返回所有具有整数属性设置为该整数的对象。我想这样做:
int exampleint = 5;
List<MyClass> extract = new List<MyClass>();
for(int i = 0; i < list.Length; i++) {
if(list[i].Number == exampleint)
extract.Add(list[i]);
}
return extract;
有没有更好或更快的方法呢?只是想知道。
更新:克里斯,你的回答有点过了。这样:
List<MyClass> extract = list.FindAll(delegate(int obj) { return obj.Number == exampleint; });
实际上应该是这样的:
List<MyClass> extract = list.FindAll(new Predicate<MyClass>(delegate(MyClass obj) { return obj.Number == exampleint; }));
你的第一个例子给了我错误。但是,感谢你指出我正确的方向,现在似乎工作。
答案 0 :(得分:7)
List<MyClass> extract = list.FindAll(obj => obj.Number == exampleint);
OR(如果您使用的是.NET 2.0且无法使用表达式)
List<MyClass> extract = list.FindAll(delegate(MyClass obj) { return obj.Number == exampleint; });
答案 1 :(得分:1)
如果你只有C#2,试试这个:
public delegate bool Predicate<T>(T item);
public static IEnumerable<T> Where(IEnumerable<T> source, Predicate pred)
{
foreach (T item in source)
{
if (pred(item))
yield return item;
}
}
只要您有这种过滤要求,就可以重复使用,如下所示:
IEnumerable<MyClass> filtered = Where(list, delegate(MyClass c) { return c.Number == exampleint; });
它与Linq解决方案基本相同,它使您能够在升级编译器时使用这种列表处理方式。
答案 2 :(得分:0)
如果您使用的是C#3:
return (from e in list
where e.Number == exampleint
select e).ToList();
这将运行LINQ查询将其拉出,然后转换为列表。如果您可以返回IEnumerable,则可以避免ToList()调用。
答案 3 :(得分:0)
使用Linq / extension方法:
var result = list.Where(x => x.PropertyValue == YourSelectedValue);
答案 4 :(得分:0)
如果你可以使用Linq:
列表extract = existingList.Where(x =&gt; x.Number == exampleInt).ToList();