2011-12-05 35 views
1

我是新的C#,我試圖瞭解其他開發人員的代碼 - 見下文:無法理解的foreach(X =>)語法

 nameFile.ForEach(x => 
     { 
      FileChecker singleFile = new FileChecker(); 
      singleFile.FileName = x; 
      singleFile.FoundDT = DateTime.Now; 

      singleFile.IsData = this.IsData(singleFile.FileName); 
      singleFile.IsStore = this.IsStore(singleFile.FileName); 
      if (singleFile.IsData) 
      { 
       //...    
      } 
     }); 

而且這裏有一個代碼FileChecker的定義片段:

public FileChecker() 
{ 
    this.fileDownloaded = false; 
    this.IsData = false; 
    this.IsStor = false; 
} 
public bool IsData { get; set; } 
public bool IsStore { get; set; } 

我有兩個問題:

  1. 有人能解釋或指向我一個鏈接,解釋這個foreach是如何工作的?的ForEach(X => ...);

  2. 我不明白這種說法多麼(singleFile.IsData)作品,因爲定義是唯一的:public bool IsData { get; set; } 換句話說,什麼開發商試圖尋找? IsData是什麼意思?他是否打算查看它是否符合條件(如文件名語法)?

回答

1

第一個問題在上面得到了回答,它只是一個lambda表達式,它攜帶需要在foreach的每次迭代中執行的代碼。

對於第二個問題,如果您正在尋找IsData屬性的目的,請進入該類的IsData方法(第一個代碼塊中的類)。

+0

感謝您對第二個問題的幫助! @gordanvij – Ray

2
  1. List.ForEach()接受,將列表中的每個項目後的=>將每個項目在nameFile列表執行執行,你的情況的代碼塊的委託,並x將是一個數據項變量。
  2. 這是自動屬性定義,將引擎蓋你這下產生支持字段就是爲什麼你可以使用它沒有定義字段中手動

您可能會發現有用的文章:「foreach」 vs 「ForEach」

4

它是相同

foreach (var x in nameFile) 
{ 
... 
} 

IsData是一個自動特性。看看它...

2
  1. x => ...被稱爲lambda表達式。 它只是說「對於每個元素,將其命名爲'x'並將其傳遞給下面的代碼。

  2. 已經有足夠的解釋了,只有值得指出的是,儘管寫起來要短得多,但您需要在構造函數中設置默認參數,而不是直接在成員字段上設置,因爲您沒有。你甚至可以使用這個自動化屬性與私人setter。