2013-03-31 19 views
1

我收到一条错误消息,使我绝对没有意义!参数类型对象不可分配给System.Func <object>错误

public class ChartInitializerBase 
{ 
    #region Constructors 
    public ChartInitializerBase(Func<object> retrieveData) 
    { 
     var Data = retrieveData; 
    } 
    #endregion 
} 

上述构造的想法是,我可以通过不同的方法来获得数据

例如,如果我展示书,我想说

var intiialiser = new ChartInitializerBase(GetBooks(1234, 231)) 

如果我获得CD我想说

var intiialiser = new ChartInitializerBase(GetCDs(1234, 231, 34)) 

上面的参数是不同的,但GetCDs和G etBooks将返回一个对象

在我的确切情况我有

var chart = new DailyConsumptionChart(
      dataProvider.GetDataForDailyConsumptionChart("1", EUtilityGroup.Electricity, 321, 157, Convert.ToDateTime("01/01/2010"), Convert.ToDateTime("01/01/2010 23:30"), false)); 



public class ProfileDataDashboardReportsDataProvider 
{ 
    #region Methods 
    public object GetDataForDailyConsumptionChart(string idString, EUtilityGroup ug, int customerId, int userId, DateTime startDate, DateTime endDate, bool clockTime) 
    { 
     var mdp = new MeterDataProvider(); 
     var result = mdp.GetProfileDataForLocationForADay(idString, ug, customerId, userId, startDate, endDate, clockTime); 

     return result; 
    } 
    #endregion 
} 

我已经试过这既是一个静态的非静态类以及静态和非静态方法

这都没有区别哪种方式我这样做我仍然得到参数类型对象不可分配给System.Func错误

我是新来的这种事情,请有人可以建议我需要做什么来解决这个问题?

我已经看到了这Parameter type not assignable when storing func in dictionary

但是,我认为它可以帮助我

我不知道如果我在正确的区域标记此请随时改变,如果我错了

Paul

回答

6

尝试将lambda传递给您的构造函数,而不是方法执行的结果,如下面的代码示例中所示。

var initialiser = new ChartInitializerBase(() => GetBooks(1234, 231)); 

在这里,你只需通过拉姆达与一个声明 - 来电GetBooks方法

你的构造应该像

public ChartInitializerBase(Func<object> retrieveData) 
{ 
     var Data = retrieveData(); //here the method GetBooks will be called and data returned 
} 
+0

这工作!谢谢! – Paul

相关问题