0
我寫的一些日誌記錄代碼,我不得不調用兩種方法具有相同簽名:C#函數式編程:不能引用方法,需要新的行動()
void Error(string, Exception)
void Warn(string, Exception)
我決定解決這個函數式編程而不是if/else。我有一個bool wasHandled
來確定調用哪個方法。我想:
不能選擇從方法組方法:
Action<string, Exception> logAction = wasHandled ? _logger.Warn : _logger.Error;
但是,編譯器/智能感知與抱怨。你打算採用這種方法嗎?
相反,我不得不把它寫這樣的:
var logAction = wasHandled ? new Action<string, Exception>(_logger.Warn) : _logger.Error;
我得到的var
的獎金,但我真的很討厭,我必須明確地調用new Action....
。
爲什麼前者不起作用?
[這個問題的答案可能有幫助](http://stackoverflow.com/questions/6015747/why-does-funcbool-test-value-ff-not-compile)它不完全相同,但它是一個類似的問題。 –
@MatthewWatson很遺憾,問題在中途改變了(從'var'到'Func <>'),所以響應是混合的。 – xanatos
請注意,你甚至可以寫'var logAction = wasHandled? (Action)_logger.Warn:_logger.Error;',所以使用cast而不是構造函數(生成的代碼沒有真正的區別) –
xanatos