保护检查lambda



我通常这样执行保护检查:

public void doStuff(Foo bar, Expression<Func<int, string>> pred) {
  if (bar == null) throw new ArgumentNullException();
  if (pred == null) throw new ArgumentNullException();
  // etc...
}

我已经看到了这个额外的检查,它确保谓词实际上是一个lambda:

  if (pred.NodeType != ExpressionType.Lambda) throw new ArgumentException();

ExpressionType枚举有很多可能性,但我不明白它们中的任何一个是如何应用的,因为我假设编译器只允许一个lambda。

Q1: 这样做有好处吗?我们对所有输入都做了彻底的保护检查,所以这会增加价值吗?

Q2:是否存在性能损失-即,它是否比常规类型/边界/null检查花费更长时间?

Func<int, string>是一个委托,可以是函数的地址,也可以内联为lambda表达式[() => x]。

Expression<TDelegate>继承LambdaExpression, Expression<TDelegate>NodeType总是ExpressionType.Lambda.

所以,我认为这种防御代码是不需要的。

相关内容

  • 没有找到相关文章

最新更新