2013-10-09 49 views
0

說我有下面的類找到委託的

public class Conditional 
{ 
    private readonly Func<Boolean> _conditional; 

    public Conditional(Func<Boolean> test) 
    { 
     _conditional = test; 
    } 

    public override BehaviourReturnCode Behave() 
    { 
     var conditionalResult = _conditional.Invoke(); 
//... keeps going 
} 

所以當我創建條件的情況下,我會做類似

var isAlive = new Conditional(actor.IsAlive); 

所以問題是,如何名稱我可以找到方法名稱_conditional,在這種情況下IsAlive?

僅供參考_conditional.Method.Name沒有做到這一點:d

乾杯

+0

所以在你的榜樣,你所期待的IsAlive被分配 「的IsAlive」? – jmstoker

+0

您是否關心lambda和分類代表? – jcwrequests

+1

@Miau我試過了,_conditional.Method.Name吐出「IsAlive」。請參閱https://gist.github.com/anonymous/6908215 - 我正在使用Mac .NET 4.5上的Mono。 – Krumelur

回答

4

考慮以下幾點:

Func<bool> UserIsAlive =() => 
    { 
     return false; 
    }; 

Func<bool> UserIsDead = UserIsAlive; 

您有哪些引用同一個lambda函數兩個局部變量。

哪一個是真名? UserIsAliveUserIsDead

提示:它沒有名稱。這是一個功能。如果你想用某種方式來命名它,那就決定你應該怎麼做。把它包裝在一個班級?將它存儲在字典中?將名稱傳遞給像這樣的函數?

var isAlive = new Conditional(actor.IsAlive, "IsAlive");

+0

從技術上講,匿名方法確實有一個名稱;編譯器會爲其自己的內部使用生成一個。答案的精神仍然是正確的。 – Servy