Action<T>, Func<T> and Predicate<T>
WPF/MVVM 学習の一環として、デリゲートの違いを理解しようとしています。
Action<T> and Func<T>
どちらもゼロから1つ以上のパラメーターを取りFunc<T>
、値を返すだけで、値を返さないことを知っAction<T>
ています。
についてPredicate<T>
は、わかりません。
したがって、私はこの次の質問を思いつきました:
- 何をし
Predicate<T>
ますか?(例を歓迎します!) - ifが何も
Action<T>
返さないvoid
場合、代わりに使用する方が簡単ではないでしょうか?Func<T>
(または、話しているのであれば他のタイプです。)
質問で LINQ/List の例を避けてください。
私はすでにそれらを見てきましたが、これらのデリゲートに「興味を持った」コードはそれとは何の関係もないので、混乱を招くだけです (私は思います!)。
したがって、私はよく知っているコードを使用して答えを得たいと思います。
ここにあります:
public class RelayCommand : ICommand
{
readonly Action<object> _execute;
readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute)
: this(execute, null)
{
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
[DebuggerStepThrough]
public bool CanExecute(object parameters)
{
return _canExecute == null ? true : _canExecute(parameters);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameters)
{
_execute(parameters);
}
}
注:
非常に長いコード ブロックを避けるために、コメントを削除しました。
完全なコードはHEREにあります。
どんな助けでも大歓迎です!ありがとう!:)
PS: 他の質問を私に向けないでください。検索しようとしましたが、理解できるほど簡単なものは見つかりませんでした。