我想解釋一下我的問題的最佳方法是使用短(一般)LINQ到對象的代碼示例:C#Linq/Lambda表達式:如何從字符串中選擇一個整數?
IEnumerable<string> ReadLines(string filename)
{
string line;
using (var rdr = new StreamReader(filename))
while ((line = rdr.ReadLine()) != null)
yield return line;
}
IEnumerable<int> XValuesFromFile(string filename)
{
return ReadLines(filename)
.Select(l => l.Substring(3,3))
.Where(l => int.TryParse(l))
.Select(i => int.Parse(i));
}
注意,這個代碼解析整數的兩倍。我知道我錯過了一個顯而易見的簡單方法來安全地消除這些電話中的一個(也就是我以前做過的)。我現在找不到它。我怎樣才能做到這一點?
我看着這種方法。我只是不喜歡編譯器無法推斷出類型(至少在C#3中)的事實,所以「Reduce」擴展可用性受損...... –
我主要的抱怨是** 1)**,我可以不會在單一陳述中表達轉換。在lambda中我仍然需要一個變量聲明。和** 2)**,我必須將結果表示爲一個元組而不是轉換後的項目。 –