属性中的 Lambda 表达式
Lambda expressions in attribute
我有一个名为 Mod 的静态 class 和一个名为 Map:
的静态函数
public static class Mod<TModel>
{
public static string Map<TValue>(Expression<Func<TModel, TValue>> expression)
{
throw new Exception("Not implemented");
}
}
我可以像这样执行方法(没问题):
var test = Mod<string>.Map<string>(x => x.ToLower());
我在其构造函数中有一个带有字符串参数的属性:
public class MyTestAttribute : Attribute
{
public MyTestAttribute(string label)
{
}
}
为什么我不能这样称呼它?
[Attributes.MyTest(Attributes.Mod<string>.Map<string>(x => x.ToLower()))]
public string SomeProperty { get; set; }
我收到错误 "expression cannot contain anonymous methods or lambda expressions"。但是为什么?
我很清楚 lambda 表达式在属性中不起作用...但是为什么带有 lambda 的静态 class/static 方法不能作为属性的参数(...如果这是我遇到的问题)?
谢谢
因为您传递给 Attribute 的构造函数的值应该是编译时 constant.And 您的方法的结果不是常量,因为它在编译时未知 time.So 这实际上并不具体对于 lambda 表达式,它只能是其中之一,如错误消息中所述:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
我有一个名为 Mod 的静态 class 和一个名为 Map:
的静态函数public static class Mod<TModel>
{
public static string Map<TValue>(Expression<Func<TModel, TValue>> expression)
{
throw new Exception("Not implemented");
}
}
我可以像这样执行方法(没问题):
var test = Mod<string>.Map<string>(x => x.ToLower());
我在其构造函数中有一个带有字符串参数的属性:
public class MyTestAttribute : Attribute
{
public MyTestAttribute(string label)
{
}
}
为什么我不能这样称呼它?
[Attributes.MyTest(Attributes.Mod<string>.Map<string>(x => x.ToLower()))]
public string SomeProperty { get; set; }
我收到错误 "expression cannot contain anonymous methods or lambda expressions"。但是为什么?
我很清楚 lambda 表达式在属性中不起作用...但是为什么带有 lambda 的静态 class/static 方法不能作为属性的参数(...如果这是我遇到的问题)?
谢谢
因为您传递给 Attribute 的构造函数的值应该是编译时 constant.And 您的方法的结果不是常量,因为它在编译时未知 time.So 这实际上并不具体对于 lambda 表达式,它只能是其中之一,如错误消息中所述:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type