【问题标题】:Lambda expressions in attribute属性中的 Lambda 表达式
【发布时间】:2015-02-10 18:49:36
【问题描述】:

我有一个名为 Mod 的静态类和一个名为 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; }

我收到错误“表达式不能包含匿名方法或 lambda 表达式”。但是为什么呢?

我很清楚 lambda 表达式在属性中不起作用...但是为什么带有 lambda 的静态类/静态方法不能作为属性的参数(...如果这是我遇到的问题)?

谢谢

【问题讨论】:

    标签: c# custom-attributes lambda


    【解决方案1】:

    因为您传递给 Attribute 的构造函数的值应该是编译时常量。并且您的方法的结果不是常量,因为它在编译时是未知的。所以这实际上并不是特定于 lambda 表达式,它可以只能是其中之一,如错误消息中所述:

    属性参数必须是属性参数类型的常量表达式、typeof表达式或数组创建表达式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2010-12-28
      • 2023-03-10
      • 2013-05-24
      相关资源
      最近更新 更多