【发布时间】:2014-12-20 00:10:43
【问题描述】:
我有一段这样的代码。 我写这个是因为我喜欢扩展方法和 lambda 表达式:
public static class TuneingRules
{
public static Func<HtmlNode, bool> IsNodeHavingClearNone = (node) =>
{
if (node.HasAttributes)
{
// HtmlAttribute atr = item.Attributes.Where(at => at.Name == "id" && at.Value == "hello").FirstOrDefault();
HtmlAttribute atr = node.Attributes.Where(at => at.Name == "style").FirstOrDefault();
if (atr != null)
{
return Regex.Match(atr.Value, "clear\\s*:\\s*none;").Success;
}
}
return true;
};
}
和这样的扩展方法。
public static class ExtensionMethods
{
#region Ignoring Rules
public static bool Ignore(this HtmlNode Node, Func<HtmlNode,bool> func) {
return func(Node);
}
#endregion
}
现在我有两种方法来使用这段代码..
1 例
if (!htmlNode.Ignore(TuneingRules.IsNodeHavingClearNone)){
//then do somethings
}
// here i am open to write lambda expression like this.
if (!htmlNode.Ignore( node => node.innerText =="" ){
//then do somethings
}
2 例
if (!TuneingRules.IsNodeHavingClearNone(htmlNode)) {
//then do something
}
如果TuneingRules 恐怕会有性能问题
有许多静态 Func<HtmlNode,bool> 对象。我需要重构我的代码吗?
在第一种情况下,有一个额外的调用通过忽略函数......
但在第二种情况下,我可以直接调用函数对象。
或者是否有另一种方法来编写此代码以坚持使用 lambda 以及扩展方法?
【问题讨论】:
标签: c# lambda extension-methods