這可能很簡單,但我對Lambda的新東西很感興趣。如果語句在Lambda函數內?
我有一個使用lambda函數遞歸函數。 主函數收到一個布爾值,告訴它在lambda中包含或不包含某些信息。
該功能的目的是寫出一個自定義類爲XML - 我認爲的代碼是非常強的自我explanitory。
在我已經克服了使用簡單的if語句問題的那一刻,但感覺醜陋所以想知道,如果有人知道一個更好的辦法?
private XElement ErrorListToXml(ErrorList el, bool outputTagsOnly)
{
// Need to declare in advance to call within the lambda.
Func<ErrorType, XElement> recursiveGenerator = null;
if (outputTagsOnly)
recursiveGenerator = error => new XElement
(error.Name,
error.ChildErrors.Select(recursiveGenerator));
else
recursiveGenerator = error => new XElement
(error.Name,
new XAttribute("Ignore", error.Filter),
error.ChildErrors.Select(recursiveGenerator));
var element = new XElement
("ErrorList",
ChildErrors.Select(recursiveGenerator));
Console.WriteLine(element);
return element;
}
感謝這也正是我一直在尋找 – Chris 2009-06-03 13:56:48
這裏的表現比原來的代碼略差:您檢查標誌outputTagsOnly上一代_every_節點,而這是完全不必要的,你可以檢查一次。 (當然,對於小的輸入數據來說,它是微不足道的) – 2009-06-03 14:16:21
是的,我意識到這一點,但是與實際構建XML元素的開銷相比,標誌檢查是微不足道的,我認爲它與可讀性相比絕對不爲重要。 – mquander 2009-06-03 14:18:33