如何获取列表中的项目<>基于整数字段?

时间:2009-03-13 18:12:26

标签: c# generics list

我有一个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; }));

你的第一个例子给了我错误。但是,感谢你指出我正确的方向,现在似乎工作。

5 个答案:

答案 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();