2013-12-23 173 views

回答

3

如果我理解正確你的問題,你可能會尋找爲Expression.Convert

Expression<Func<T,object>> original = // ... something 
Expression<Func<T,TResult>> converted = Expression.Lambda<Func<T,TResult>>(
     Expression.Convert(original.Body,typeof(TResult)), 
     original.Parameters); 

Demo on ideone.

+0

謝謝,這就是工作!但仍然有一個問題:當我需要這個unboxed表達式時,我不知道TResult的類型(除了實現IPersistable)。我可以記住/獲取類型並在switch case case表達式中打包調用'Unbox (f1)'。但是你知道更舒適的方式嗎? – core

+0

如果您不知道TResult是什麼,您將如何獲得Func ?你至少有一個代表TResult的System.Type對象? – Olivier

+0

獲取或持有該類型不成問題。但是,這個問題是否值得一個新的線程? – core

相關問題