我有一個Func<T, string>
,我想轉換爲Func<dynamic, string>
。可能嗎?有沒有辦法將Func <T, string>轉換爲Func <dynamic,string>?
回答
你在這裏。只需要決定你想要做什麼,當你的動態值不T
類型:
public Func<dynamic, string> ConvertToDynamicFunc<T>(Func<T, string> typedFunc)
{
Func<dynamic, string> dynamicFunc = (input) =>
{
if (input is T)
return typedFunc((T)input);
return null; //or throw?
};
return dynamicFunc;
}
Func<int, string> typedFunc = (input) => input.ToString();
Func<dynamic, string> dynamicFunc = ConvertToDynamicFunc(typedFunc);
System.Console.WriteLine(dynamicFunc(10));//outputs "10";
System.Console.WriteLine(dynamicFunc(10.5));//outputs null since a double isn't an int (type T) or throw if you prefer;
肯定的:
Func<T, string> input = ...
Func<dynamic, string> output = x => input(x);
當然,如果你有不兼容的類型執行的委託,你會得到一個RuntimeBinderException
。
當然,但如果輸入到'output'不是'T',那麼在運行時會失敗。 (即使動態參數duck-typed相同的成員)雖然承認這是你可以做的最好的。 –
@KirkWoll:當然,但如果你首先願意使用動態,你顯然已經評估過風險,並且無論如何都要繼續。 – Ani
我的意思是,如果你首先編寫一個基於動態的實現,比如'Func
- 1. 如何將Func <T, object>轉換爲Func <dynamic,object>?
- 2. Func <T, dynamic> to Func <TEntity,dynamic>
- 3. 將Func <T, String>轉換成Func <T, bool>
- 4. 如何Func鍵<T,bool>轉換爲表達<Func<T,bool>>
- 5. Func <T>如何隱式轉換爲表達式<Func<T>>?
- 6. C# - 如何將Func <T, bool>轉換爲Func <dynamic,bool>?使用實體框架4
- 7. 將表達式<Func <IBar, T>>轉換爲表達式<Func<Bar, T>>
- 8. Func <Owned<T>> vs Func <T> dependency
- 9. 如何將IQueryable <T>轉換爲表達式<Func <T, bool>>?
- 10. 使用Expression API,有沒有辦法將Func <T>與另一個「組合」?
- 11. 將表達式<Func<T, U>>轉換爲表達式<Func <object,object >>
- 12. 將表達式<Func <T,TProperty >>轉換爲表達式<Func <object,object >>,反之亦然
- 13. 如何將表達式<Func <T, bool>>轉換爲表達式<Func <Type, bool>>?
- 14. 如何將表達式<Func <T, object>>轉換爲表達式<Func <object,object >>
- 15. 將函數Func <IList, int>轉換爲Func <IEnumerable,int>?方法
- 16. Func <T, T>通用隱式轉換爲T
- 17. 轉換表達<Func鍵<T, bool?>>以表達<Func鍵<T, bool>>
- 18. 如何將LambdaExpression轉換爲鍵入的表達式<Func<T, T>>
- 19. PCL - 無法從Func鍵<IThing<T>>轉換爲Func鍵<Object>一些目標
- 20. 我如何將Func <T,object>轉換爲PropertyInfo
- 21. 表達<Func鍵<in T, bool>>或表達<Func鍵<TBase,bool>>表達式<Func<T,bool>>轉換器
- 22. 無法在表達式<Func<...>>和Func <...>之間轉換
- 23. 更快地將Func <T, T2>投射到Func <T, object>?
- 24. 從單參數獲取Func <T>和表達式<Func<T>>
- 25. 轉換表達<Func鍵<FromType>>以表達<Func<ToType>>
- 26. 上Func鍵<T>
- 27. Autofac Func <T> with InstancePerMatchingLifetimeScope
- 28. 表達<Func鍵<T, bool>>從F#FUNC
- 29. 將表達式轉換爲表達式<Func <T, bool>>
- 30. 如何將BinaryExpression轉換爲表達式<Func <T, bool>>?
如果你有一個'Func鍵'那麼FUNC預計類型T'的'的值。你當然可以在它周圍包裝一個'Func ',但如果'dynamic'參數不是'T'的實例,它將在運行時失敗。如果沒有'Func '作爲表達式樹,就沒有辦法分解它,而是用動態參數重新組裝它。 –
很好的答案和每個人的意見。答案很簡單,正如你在下面看到的,我只是很疲倦地看到它。 –