我为C#和UWP应用程序编程。我正在使用视频来学习ICommand,但在那个视频中,我们创建了一个这样的类。你能解释一下这是什么吗?
特别是return _canExecute == null || _canExecute(parameter);
的含义是什么?因为我在C#编码中没有看到类似的东西。我没有看到这种打字方法。
class DelegateCommand : ICommand
{
private Action<object> _execute;
private Func<object, bool> _canExecute;
public event EventHandler CanExecuteChanged;
public DelegateCommand (Action<object> execute, Func<object,bool> canExecute = null)
{
if (execute == null)
{
throw new ArgumentNullException(nameof(execute));
}
_execute = execute;
_canExecute = canExecute;
}
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
感谢您的帮助。
答案 0 :(得分:2)
return _canExecute == null || _canExecute(parameter);
返回true
是其中一个或两个语句评估为true
。
因此,如果_canExecute
函数委托为null
或函数调用结果为true
,则返回true
,否则返回false
。
这是一个基本的逻辑OR操作。
为什么以这种方式编写是因为如果语句的左侧为真,它会立即返回true
而不评估右侧。如果左侧评估为false
,则仅查看右侧。
哪个是安全的,因为这意味着_canEcevute
不是null
,因此_canEcevute(parameter)
可以安全地调用。
答案 1 :(得分:0)
让我们先看一下构造函数签名:
DelegateCommand (Action<object> execute, Func<object,bool> canExecute = null)
如您所见,第二个参数canExecute
是可选的,默认值为null
。此类的语义如下所示:通过传递第二个参数(不等于null),当且仅当Action<object> execute
应用于对象返回{{1}时,才声明Func<object,bool> canExecute
是可执行的}。如果您未传递第二个参数或传递true
作为第二个参数,则表明始终可以执行null
。另请注意Action<object> execute
未检查bool CanExecute(object parameter)
的值,因此您必须自己执行此操作,以避免因参数错误而引发的异常。
现在问题:行
void Execute(object parameter)
只是一种较短的写作形式
return _canExecute == null || _canExecute(parameter);