2013-10-30 40 views
0

我有下面的代碼,但我很困惑如何使用「Select」關鍵字綁定到字符串列表的lambda表達式。 但如何,如果我要調用的方法有2個或多個參數 我的問題是如何使lambda表達式使用Linq或Lambda「選擇」哪個方法作爲參數

//this code below is error 
    //List<TwoWords> twoWords = stringlist.Select(CreateTwoWords(1,2)) 
    //      .ToList(); 

class Program 
{ 
    public class TwoWords 
    { 
     public string word1 { get; set; } 
     public string word2 { get; set; } 

     public void setvalues(string words) 
     { 
      word1 = words.Substring(0, 4); 
      word2 = words.Substring(5, 4); 
     } 

     public void setvalues(string words,int start, int length) 
     { 
      word1 = words.Substring(start, length); 
      word2 = words.Substring(start, length); 
     } 
    } 

    static void Main(string[] args) 
    { 
     List<string> stringlist = new List<string>(); 
     stringlist.Add("word1 word2"); 
     stringlist.Add("word3 word4"); 

     //i called createTwoWords with 1 parameter 
     List<TwoWords> twoWords = stringlist.Select(CreateTwoWords) 
           .ToList(); 

     //i was confused how to make lamda experesion to call method with parameter 2 or more 
     //this code below is error 
     //List<TwoWords> twoWords = stringlist.Select(CreateTwoWords(1,2)).ToList(); 

    } 

    private static TwoWords CreateTwoWords(string words) 
    { 
     var ret = new TwoWords(); 
     ret.setvalues(words); 
     return ret; 
    } 

    private static TwoWords CreateTwoWords(string words, int start, int length) 
    { 
     var ret = new TwoWords(); 
     ret.setvalues(words, start, length); 
     return ret; 
    } 
} 

回答

6

這就是你需要:

stringlist.Select(str => CreateTwoWords(str, 1, 2)).ToList(); 

基本上,創建一個新的lambda(Func<string, TwoWords>)以您想要的方式調用函數。

+0

感謝您的幫助,我仍然是lambda表達式的新手。 – theclai