2010-08-15 18 views
1

我怎样才能改变下列代码进行第二式:我尝试使用flexable码像第一=>第二次使用...如何在linq中使用Func <Tkey,T>?

第一种类型



    private void Form1_Load(object sender, EventArgs e) 
     { 
      List<City> cities = new List<City> 

      { 
       new City{ Name = "Sydney", Country = "Australia" }, 
       new City{ Name = "New York", Country = "USA" }, 
       new City{ Name = "Paris", Country = "France" }, 
       new City{ Name = "Milan", Country = "Spain" }, 
       new City{ Name = "Melbourne", Country = "Australia" }, 
       new City{ Name = "Auckland", Country = "New Zealand" }, 
       new City{ Name = "Tokyo", Country = "Japan" }, 
       new City{ Name = "New Delhi", Country = "India" }, 
       new City{ Name = "Hobart", Country = "Australia" } 
      }; 
      List<string> mylistName = GetData(cities, c => c.Name); 
      foreach (string item in mylistName) 
      { 
       listBox1.Items.Add(item); 
      } 
      List<string> mylistCountry = GetData(cities, c => c.Country); 
      foreach (string item in mylistCountry) 
      { 
       listBox2.Items.Add(item); 
      } 
     } 

     public List<T> GetData<T>(List<City> cities, Func<City, T> selector) 
     { 
      return cities.Select(selector).ToList(); 
     } 

    } 
    public class City 
    { 

     public string Name { get; set; } 
     public string Country { get; set; } 

    } 

第二类 我需要如下:



     public List<T> GetData<T>(List<Tkey> cities, Func<Tkey, T> selector) 
     { 
      return cities.Select(selector).ToList(); 
     } 

回答

7

您还没有宣布什么TKey是 - 你甲肾上腺素ED做出,对于方法的另一个泛型类型参数:

public List<T> GetData<TKey, T>(List<TKey> cities, Func<TKey, T> selector) 
{ 
    return cities.Select(selector).ToList(); 
} 

不过,我会强烈建议,如果你有一个以上的类型参数,你把它们都“满”的名字。例如,我会使用:

public List<TResult> GetData<TSource, TResult>(List<TSource> cities, 
               Func<TSource, TResult> selector) 
{ 
    return cities.Select(selector).ToList(); 
} 

你要知道,如果它就是这么简单我个人而只是调用Select()ToList()自己。额外的方法并没有节省太多,对于大多数开发人员来说,它比标准的LINQ方法更不熟悉。

+0

你能解释一下吗?“请注意,如果真的那么简单,我个人宁愿自己调用Select()和ToList()。额外的方法并没有节省太多,对大多数开发人员来说,标准的LINQ方法“。 – Penguen 2010-08-15 17:57:23

+1

@Phsika:'GetSource'方法实际上不会直接通过调用'Select'来购买你。 – 2010-08-15 17:58:25

+0

你是否建议我上面的Jon Skeet解决方案所需的代码? – Penguen 2010-08-15 18:00:40

相关问题