Delegate System.Action不带1个参数

问题描述 投票:3回答:2

动作:

readonly Action _execute;

public RelayCommand(Action execute)
             : this(execute, null)
{
}

public RelayCommand(Action execute, Func<Boolean> canExecute)
{
    if (execute == null)
        throw new ArgumentNullException("execute");
    _execute = execute;
    _canExecute = canExecute;
}

其他班级的代码:

public void CreateCommand()
{
    RelayCommand command = new RelayCommand((param)=> RemoveReferenceExcecute(param));}
}

private void RemoveReferenceExcecute(object param)
{
    ReferenceViewModel referenceViewModel = (ReferenceViewModel) param;
    ReferenceCollection.Remove(referenceViewModel);
}

为什么会出现以下异常,该如何解决?

Delegate'System.Action'不使用1个参数

c# lambda action
2个回答
8
投票

System.Action是无参数函数的委托。使用System.Action<T>

要解决此问题,请使用以下内容替换您的RelayAction类:>

class RelayAction<T> {
    readonly Action<T> _execute;
    public RelayCommand(Action<T> execute, Func<Boolean> canExecute){
        //your code here
    }
    // the rest of the class definition
}

注意RelayAction类应成为通用类。另一种方法是直接指定将接收的参数_execute的类型,但是这种方式将限制您使用RelayAction类。因此,在灵活性和健壮性之间需要权衡。

某些MSDN链接:

  1. System.Action
  2. System.Action

0
投票

您可以定义命令'RemoveReferenceExcecute',而无需任何参数

© www.soinside.com 2019 - 2024. All rights reserved.