繁体   English   中英

警卫检查lambda

[英]Guard checking of lambdas

我通常会像这样执行警卫检查:

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:是否存在性能损失 - 即它需要比常规类型/边界/空检查更长的时间吗?

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

Expression<TDelegate>从LambdaExpression继承和NodeType一个的Expression<TDelegate>总是ExpressionType.Lambda.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM