如何在我的 List<T> 中形成一个好的谓词委托来 Find() 某些东西? [英] How do I form a good predicate delegate to Find() something in my List<T>?

查看:10
本文介绍了如何在我的 List<T> 中形成一个好的谓词委托来 Find() 某些东西?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在查看 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&lt;T&gt; 中形成一个好的谓词委托来 Find() 某些东西?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆