gpt4 book ai didi

c# - lambda 的保护检查

转载 作者:可可西里 更新时间:2023-11-01 09:14:08 27 4
gpt4 key购买 nike

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

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:这有什么好处吗?我们对所有输入进行彻底的保护检查,这是否增加了值(value)?

问题 2:是否存在性能损失 - 即它是否比常规类型/边界/空检查花费的时间更长?

最佳答案

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

Expression<TDelegate>继承自 LambdaExpression 和 NodeTypeExpression<TDelegate>总是 ExpressionType.Lambda.

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

关于c# - lambda 的保护检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38114224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com