【发布时间】:2010-10-13 05:40:15
【问题描述】:
我的程序中有一个 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; }));
你的第一个例子给了我错误。但是感谢您为我指明了正确的方向,它现在似乎可以工作了。
【问题讨论】:
-
你可以在这个项目中使用 Linq 吗?
-
很高兴我能帮上忙。这很奇怪,因为一年多来我一直在使用和编译我建议的方式,没有出现任何问题。只是通过 Visual Studio 运行它,它没有抱怨。好吧,ReSharper 抱怨说,告诉我将其转换为 lambda,但它与委托版本编译得很好。
-
我自己意识到的错误之一是“obj.Number”部分。 Int32 中没有名为 Number 的成员。
-
配置器在回复我的评论时指出了这一点。我使用 lambdas 自动检测类型的第一个示例。第二个我没有测试就启动了,你是对的,它应该是一个 MyClass。我在下面更正了。