【问题标题】:Func delegate as a constructor parameterFunc 委托作为构造函数参数
【发布时间】:2015-11-23 17:31:43
【问题描述】:

尝试使用委托来解决问题。

我有一个类synchronise.cs 接受两个不同类型的集合并对其进行编辑。这些集合保存在另一个其他 viewModel 类中。我编写了一个构造函数,它在synchronise.cs 中将两个Func 委托作为参数:

 public Synchronise(
     Func<IEnumerable<T> , IEnumerable<S>> MappingStoT,
     Func<IEnumerable<S>, IEnumerable<T>> MappingTtoS )
 {

 }

然后我尝试在我的 ViewModel 中新建一个 Synchronise 对象,并以集合作为参数传递两个方法:

this.mySynchroniser = new Synchronise<IBindableData, object>(MappingStoT(CollectionA), MappingTtoS(CollectionB));

最后我的两个方法:

 public IEnumerable<CollectionA> MappingStoT(IEnumerable<CollectionB> CollectionForEdit)
 {
     var query = blah blah
     return query;
 }

 public IEnumerable<CollectionB> MappingTtoS(IEnumerable<CollectionA> CollectionForEdit)
 {
      var query = Blah blah
      return query;
 }

我在新的Synchronizer 上收到了not assignable to parameter type。我会以正确的方式解决这个问题吗?

【问题讨论】:

  • 确切的错误应该告诉类型不匹配......
  • 还可以考虑添加类声明(class Synchronise&lt;T,S.... 除了构造函数) - new Synchronise 看起来缺少类型。
  • 您的构造函数需要一个接受序列并返回序列的方法。您正在传递一个序列,而不是这样的方法。这正是错误消息告诉您的内容,而且完全正确。
  • 编辑以反映 &
  • @Hardgraf 不,您没有通过该方法。您正在传递调用该​​方法的结果。要传递方法,您只需传递方法。如果您确实需要,您可以查看任何委托的使用示例以查看相关示例。

标签: c# .net wpf delegates


【解决方案1】:

您的构造函数需要Funcs,而不是方法调用的结果。试试这个:

class CollectionA { }
class CollectionB { }

class Synchronise<T, S>
{
    public static Synchronise<CollectionB, CollectionA> Create()
    {
        return new Synchronise<CollectionB, CollectionA>(MappingStoT, MappingTtoS);
    }

    public Synchronise(Func<IEnumerable<T>, IEnumerable<S>> MappingStoT, Func<IEnumerable<S>, IEnumerable<T>> MappingTtoS)
    {

    }
    public static IEnumerable<CollectionA> MappingStoT(IEnumerable<CollectionB> CollectionForEdit)
    {
        return null;
    }

    public static IEnumerable<CollectionB> MappingTtoS(IEnumerable<CollectionA> CollectionForEdit)
    {
        return null;
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2023-03-16
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多