2015-07-11 77 views
1

如何從函數對象獲取自定義屬性?從函數獲取屬性<T>

public static void Main(string[] args) { 

    Func<object> fun =() => Foo(); 

    //fun. Get Foo Custom Attribute 
} 

[CustomAttrib] 
public static object Foo() { 
    return new object(); 
} 
+0

或[this](http://stackoverflow.com/questions/3467765/get-method-details-using-reflection-and-decorated-attribute) –

+0

重複是不正確的 - 這是相當困難的,因爲方法在'Function'裏面。 – Glorfindel

+1

您是否需要在不調用委託並檢查檢索到的對象的情況下執行此操作? –

回答

2

隨着Function,您正在尋找的信息不可用AFAIK。

但是,如果它是一個Expression,這將是非常容易的:

Expression<Func<object>> expression =() => Foo(); 
var method = ((MethodCallExpression)expression.Body).Method; 
Console.WriteLine(method.GetCustomAttributes(false)[0]); 

可以轉換一個ExpressionFunctionCompile()方法。

var fun = expression.Compile(); 

如果你自己定義Function這可能是有益的,但如果來自一些第三方的代碼,你不能修改。

+0

我的建議是完全放棄這個函數,並去找一個更具體的接口來聲明一切。儘管使用表達式而不是委託可以更容易地檢查表達式中的代碼,但仍然很難採用「所有表達式」並能夠處理它們。一個簡單的if語句返回兩個不同的對象類型將在這裏拋出一個扳手。 –