2016-09-15 103 views
1

我想將Func<IList<object>, int>傳遞給採用Func<IEnumerable<object>, int>的方法。似乎無法解決。是否有可能做下面的事情?將函數Func <IList, int>轉換爲Func <IEnumerable,int>?方法

class A { 
     void Test() { 
      IList<object> data = new List<object>(); 

      // can't pass in MyFunc, doesn't compile 
      ApplyFunc(MyFunc, data); 
     } 

     int MyFunc(IList<object> data) { 
      return 0; 
     } 

     void ApplyFunc(Func<IEnumerable<object>, int> f, IList<object> data) { 
      f(data); 
     } 
    } 
+2

的簽名這是可能的副本https://stackoverflow.com/questions/36006997/func-variance-with-multiple-parameters/36007182或https://stackoverflow.com/questions/13025176/conversion-from-funcobject-string-to-funcstring-string-工作原理,但是到funcint。 – kiziu

回答

-2

如果仿製藥是一種選擇,你可以這樣做:

class A { 
    void Test() { 
     IList<object> data = new List<object>(); 

     // can't pass in MyFunc, doesn't compile 
     ApplyFunc(MyFunc, data); 
    } 

    int MyFunc(IList<object> data) { 
     return 0; 
    } 

    void ApplyFunc<TEnumerable>(Func<TEnumerable, int> f, TEnumerable data) 
     where TEnumerable : IEnumerable<object> 
    { 
     f(data); 
    } 
} 

見琴:https://dotnetfiddle.net/juEWYf

+0

除非我錯過了一些不編譯的東西。 – CoderBrien

+0

@CoderBrien改變了它。與代表你會需要一個演員。對不起,錯過了。 – Nico

2

測試方法如下:

public void Test() 
{ 
    IList<object> data = new List<object>(); 

    ApplyFunc(x => MyFunc(x as IList<object>), data); 
} 
相關問題