参数类型对象无法分配给System.Func <object>错误 - c#

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

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))

上面的参数不同,但是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
}

我已经尝试过将其作为静态,非静态类以及静态和非静态方法

这仍然没有区别,我仍然得到参数类型对象不可分配给System.Func错误

我对这种事情是陌生的,请有人可以提出建议以解决此问题吗?

我已经看过这个Parameter type not assignable when storing func in dictionary

但我不认为这对我有帮助

我不确定我是否在正确的区域添加了标签,如果我写错了,请随时更改

保罗

参考方案

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

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

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

你的构造函数应该像

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

如何获取Expression <Func <object >>目标对象设置值? - c#

我尝试创建一个比较原始值和更新后值的函数,并将原始值设置为更新后的值(如果不同)。该函数的作用更多,因此我简化了对主题的讨论:public void Match<T>(Expression<Func<object>> original, Expression<Func<object>> update…

转换Map <Integer,Set <Object >> - java

我有一个采用Map<Integer, Set<Object>>作为参数的方法。我需要使用Map<Integer, Set<String>>和Map<Integer, Set<Integer>>作为参数从两个不同的位置调用它。编译器投诉,因此我将方法参数签名更改为Map<Intege…

将对象转换为List <object> - c#

我看过类似的问题,但没有什么合适的。我有一个碰巧包含列表的对象。我想把它变成我可以列举的东西。例如:object listObject; // contains a List<Something> List<object> list; list = listObject as List<object>; // list c…

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

菱形运算符<>是否等于<?> - java

我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…