2012-07-09 64 views
3

我做一個簡單的Linq查詢上的XML文件如果IEnumerable的<string>回報只是一個字符串

IEnumerable<string> value = from item in myFile.Descendants("ProductName") 
          select (string)item; 

通常情況下(如果我有一個以上的行),我可以使用foreach循環遍歷:

foreach (string str in value) 
{ 
    Console.WriteLine(str); 
} 

但是,如果我敢肯定,我只有一個項目,我的方法簽名是什麼:

public string getValue() 
{ 
    return ?; 
} 

我應該返回什麼(如果我想刪除foreach循環)?

回答

3

Single/SingleOrDefaultFirst可以解析元件的可枚舉下降到一個/ FirstOrDefault方法。

Single的方法預計只有一個元素和意願異常,如果結果中包含零個或一個以上的元件。使用SingleOrDefault來應對零和一個。

「First」對可以同時處理多個,但如果沒有元素,則會再次拋出First

所有這些方法都帶有重載,允許您指定條件,從而無需使用.Where調用。

你的情況:

string value = (from item in myFile.Descendants("ProductName") 
       select (string)item) 
       .SingleOrDefault(); 

當單個或一之間進行選擇,使用Single如果你希望一個元素,使用SingleOrDefault如果你希望零個或一個元素,並使用First/FirstOrDefault(帶有某種沿OrderBy)如果你不在乎有多少元素被返回。

另請注意,這些方法使用延遲執行,所以一旦滿足First它將停止迭代。

2

如果你想只返回一個項目,然後用FirstOrDefault()

public string getValue() 
{ 
    IEnumerable<string> value = from item in myFile.Descendants("ProductName") 
         select (string)item; 
    return value.FirstOrDefault(); 
} 
5

如果你相信,總有一個確切的字符串,可以返回value.Single()

有些選項:

這取決於如果你想,如果有一個以上的元素(使用是引發異常SingleSingleOrDefault ),或根本沒有元素(使用FirstSingle )。

如果你總是除了一個元素,我會堅持Single(),因爲如果有零個或多個元素,它會拋出一個異常。

+0

謝謝@BigYellowCactus的回覆,但我選擇了Adam Houldsworth,因爲他給出了一個代碼示例,並解釋了這種情況。 – 2012-07-09 14:18:26

+0

@Wassim沒問題:-) – sloth 2012-07-09 14:26:31

0

如果您確定只有一個,且只能有一個,則應使用Single。 這實際上會拋出一個異常,如果你有多個。

相關問題