问题描述
在查看 MSDN 之后,我仍然不清楚我应该如何使用 T 的成员变量(其中 T 是一个类)在 List 中使用 Find() 方法来形成一个正确的谓词
After looking on MSDN, it's still unclear to me how I should form a proper predicate to use the Find() method in List using a member variable of T (where T is a class)
例如:
public class Car
{
public string Make;
public string Model;
public int Year;
}
{ // somewhere in my code
List<Car> carList = new List<Car>();
// ... code to add Cars ...
Car myCar = new Car();
// Find the first of each car made between 1980 and 2000
for (int x = 1980; x < 2000; x++)
{
myCar = carList.Find(byYear(x));
Console.Writeline(myCar.Make + myCar.Model);
}
}
我的byYear"谓词应该是什么样的?
What should my "byYear" predicate look like?
(MSDN 示例仅讨论恐龙列表,仅搜索不变的值saurus"——它没有显示如何将值传递给谓词...)
(The MSDN example only talks about a List of dinosaurs and only searches for an unchanging value "saurus" -- It doesn't show how to pass a value into the predicate...)
我使用的是 VS2005/.NET2.0,所以我认为 Lambda 表示法对我不可用...
I'm using VS2005/.NET2.0, so I don't think Lambda notation is available to me...
在示例中删除了1999",因为我可能希望根据不同的值以编程方式查找".使用 for-do 循环将示例更改为从 1980 年到 2000 年的汽车范围.
Removed "1999" in the example because I may want to "Find" programatically based on different values. Example changed to range of cars from 1980 to 2000 using for-do loop.
推荐答案
好的,在 .NET 2.0 中您可以使用委托,如下所示:
Ok, in .NET 2.0 you can use delegates, like so:
static Predicate<Car> ByYear(int year)
{
return delegate(Car car)
{
return car.Year == year;
};
}
static void Main(string[] args)
{
// yeah, this bit is C# 3.0, but ignore it - it's just setting up the list.
List<Car> list = new List<Car>
{
new Car { Year = 1940 },
new Car { Year = 1965 },
new Car { Year = 1973 },
new Car { Year = 1999 }
};
var car99 = list.Find(ByYear(1999));
var car65 = list.Find(ByYear(1965));
Console.WriteLine(car99.Year);
Console.WriteLine(car65.Year);
}
这篇关于如何在我的 List<T> 中形成一个好的谓词委托来 Find() 某些东西?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!