【发布时间】: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<T,S....除了构造函数) -new Synchronise看起来缺少类型。 -
您的构造函数需要一个接受序列并返回序列的方法。您正在传递一个序列,而不是这样的方法。这正是错误消息告诉您的内容,而且完全正确。
-
编辑以反映
& -
@Hardgraf 不,您没有通过该方法。您正在传递调用该方法的结果。要传递方法,您只需传递方法。如果您确实需要,您可以查看任何委托的使用示例以查看相关示例。