代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

ICommand_无法执行问题

  •  0
  • Tony The Lion  · 技术社区  · 14 年前

    我有以下代码,它不会编译,因为编译器无法确定canexecute方法的返回类型。有人能帮我查出什么问题吗?

    class ViewCommand : ICommand
        {
            #region ICommand Members
    
            public delegate Predicate<object> _canExecute(object param);
            private ICommand _Execute;
    
            _canExecute exe;
    
            public bool CanExecute(object parameter)
            {
                return exe == null ? true : exe(parameter); // <-- Error no implicit conversion between Predicate<object> and bool
            }
    
    ... // more code
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   John Weldon    14 年前

    ICommand接口声明 CanExecute 作为一个接受参数并返回bool的函数。

    您的 _canExecute 接受参数并返回 Predicate<object>

    调用的方法是将参数传递给 exe

    exe(parameter)(parameter);
    

    但我怀疑这是你的意图。

    我想你要申报 exe 作为谓词,并跳过委托声明。

    private Predicate<object> exe;
    

    这就是我认为你想要的样子:

    class ViewCommand : ICommand
        {
            #region ICommand Members
    
            private ICommand _Execute;
    
            Predicate<object> exe;
    
            public bool CanExecute(object parameter)
            {
                return exe == null ? true : exe(parameter); // <-- Error no implicit conversion between Predicate<object> and bool
            }
    
    ... // more code
    }