2015-02-10 136 views
0

我有一個名爲國防部使用靜態函數調用的地圖靜態類:Lambda表達式的屬性

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的靜態類/靜態方法作爲參數的參數工作(...如果這是我的問題經歷)?

感謝

回答

2

因爲要傳遞給屬性的構造應編譯時間的價值constant.And,因爲它在編譯time.So知道你的方法的結果不是一個常數,這是不實際的具體到lambda表達式,它只能是這些中的一個作爲錯誤消息說明:

的屬性參數必須是常量表達式,屬性參數類型的typeof運算表達式或數組創建表達式

+0

非常感謝:) – Beakie 2015-02-10 10:55:34