2015-02-10 3 views
0

У меня есть статический класс с именем 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; } 

Я получаю сообщение об ошибке «выражение не может содержать анонимные методы или лямбда-выражения». Но почему?

Я хорошо осведомлен лямбда-выражения не будут работать в атрибутах ... но почему статический класс/статический метод с лямбдой не будет работать как параметр для атрибута (... если это проблема, я опыт)?

Благодаря

ответ

2

Поскольку значение, которое вы передаете конструктору атрибута должно быть время компиляции constant.And результат вашего метода не является постоянной величиной, так как не известно, на этапе компиляции time.So это на самом деле не конкретные для лямбда-выражений, он может быть только один из них, как описано в сообщении об ошибке:

аргумент атрибут должен быть константным выражением, TypeOf выражение создания выражение или массив типа параметра атрибута

+0

Очень ценится :) – Beakie

Смежные вопросы