【发布时间】:2013-10-12 10:39:57
【问题描述】:
为什么不能声明Lambda Expression 类型的类常量字段。我想要这样的东西:
class MyClass
{
public const Expression<Func<string,bool>> MyExpr = (string s) => s=="Hello!";
}
但我得到编译错误:Expression cannot contain anonymous methods or lambda expressions
【问题讨论】:
-
您确定我们看到了您的确切代码吗?你在其他地方使用
s吗? -
@JeppeStigNielsen 是的,我确定。 s 不在其他任何地方使用。你没有这个问题吗?你能声明这样一个字段吗?
-
@Alireza:是的,你可以。我只是复制/粘贴了代码,它工作得很好。编辑:除非,你的意思是你想要
public LambdaExpression...而不是public Expression<...? -
根据您的更新,您不能使用
const,您必须使用readonly。const要求它是编译时常量;您可以想象在使用MyExpr的任何地方复制/粘贴的东西。readonly将在运行时解析,就像您只是引用一个字段一样。 -
您可以拥有的
Expression<Func<string, bool>>类型的唯一const值是null。但是错误消息令人困惑。我还没有尝试自己编译上面的代码。
标签: c# class lambda expression field