2016-09-09 96 views
3

我想申請FUNC對象作爲轉換器是這樣的:從函數創建轉換器的最佳方法是什麼?

Func<int, double> f = x => x/2.5; 
Converter<int, double> convert = f; 
List<double> applied_list = new List<int>(){1, 2, 3}.ConvertAll(convert); 

編譯器給了我這樣的消息:

錯誤CS0029無法隱式轉換類型 'System.Func' 到 'System.Converter'

使用函數作爲轉換器的最佳方法是什麼?

回答

9

有三種選擇這裏。在我的優先順序,它們分別是:

  • 開始使用LINQ,而不是ConvertAll

    List<double> appliedList = new List { 1, 2, 3 }.Select(f).ToList(); 
    
  • 創建一個轉換器入手:

    Converter<int, double> converter = x => x/2.5; 
    List<double> appliedList = new List { 1, 2, 3 }.ConvertAll(converter); 
    
  • 如果你真的,真的必須使用委託創建表達式從函數創建轉換器:

    Func<int, double> f = x => x/2.5; 
    Converter<int, double> converter = new Converter<int, double>(f); 
    List<double> appliedList = new List { 1, 2, 3 }.ConvertAll(converter); 
    

最後一個選項會創建一個委託,它只包裝原始委託。

4

使用var converter = new Converter<int, double>(f),或者簡單地使用Select()映射來代替:

var appliedList = new List<int>(){ 1, 2, 3 }.Select(f); 
3

如果你喜歡使用.ConvertAll,而不是.Select然後實現一個簡單的解決方法來轉換Func以下列方式委派Converter

Func<int, double> f = x => x/2.5; 
    Converter<int, double> convert = x => f(x); 
    List<double> applied_list = new List<int>() { 1, 2, 3 }.ConvertAll(convert); 
相關問題