我有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);
}
} 谢谢你的帮助。
发布于 2017-07-23 21:17:10
return _canExecute == null || _canExecute(parameter);Return true为true,或者两个语句的计算结果均为Return。
因此,如果_canExecute函数委托为null,或者对true的函数调用结果为true,则返回true,否则返回false。
它是一种基本的逻辑OR操作。
之所以以这种方式编写,是因为如果语句的左侧为真,它会立即返回true,而不计算右侧。如果左侧的计算结果为false,它将只查看右侧。
这是安全的,因为这意味着_canEcevute不是null,因此调用_canEcevute(parameter)是安全的。
发布于 2017-07-23 23:16:40
让我们先来看一下构造函数签名:
DelegateCommand (Action<object> execute, Func<object,bool> canExecute = null)如您所见,第二个参数canExecute是可选的,其默认值为null。该类的语义如下:通过传递第二个参数(不等于null),您可以声明当且仅当应用于对象的Func<object,bool> canExecute返回true时,Action<object> execute才是可执行的。如果不传递第二个参数,或者将null作为第二个参数传递,则可以声明Action<object> execute总是可以执行的。还请注意,void Execute(object parameter)不会检查bool CanExecute(object parameter)的值,因此您必须自己检查,以避免因参数错误而引发的异常。
现在来看你的问题:这行
return _canExecute == null || _canExecute(parameter);只是一种较短的写作形式
var tmp = ((_canExecute == null) || (_canExecute(parameter)));
return tmp;https://stackoverflow.com/questions/45265276
复制相似问题