参数类型对象不能分配给System.Func <object>错误

Pau*_*aul 2 c# delegates

我收到一条错误消息,对我来说绝对没有意义!!

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

上面的构造函数的想法是我可以传递不同的方法来获取数据

例如,如果我要显示我想说的书

var intiialiser = new ChartInitializerBase(GetBooks(1234, 231))
Run Code Online (Sandbox Code Playgroud)

如果我要获得CD,我想说

var intiialiser = new ChartInitializerBase(GetCDs(1234, 231, 34))
Run Code Online (Sandbox Code Playgroud)

上面的参数不同,但GetCD和GetBooks都会返回一个对象

在我的确切情况下,我有

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
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个静态非静态类以及静态和非静态方法

它没有区别我这样做我仍然得到Argument类型对象不能分配给System.Func错误

我是这种新手,请有人建议我需要做些什么来解决这个问题?

在组织字典中存储func时看到这个参数类型不可分配

但我不认为这有助于我

我不确定我是否在正确的区域标记这个,如果我错了,请随时更改

保罗

Ily*_*nov 6

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

var initialiser = new ChartInitializerBase(() => GetBooks(1234, 231));
Run Code Online (Sandbox Code Playgroud)

在这里,您只需通过一个语句传递lambda - 调用GetBooks方法

你的构造函数应该是这样的

public ChartInitializerBase(Func<object> retrieveData) 
{ 
      var Data = retrieveData(); //here the method GetBooks will be called and data returned
}
Run Code Online (Sandbox Code Playgroud)