何もしない「空の」ラムダ式を宣言したいと思います。 DoNothing()
メソッドを必要とせずにこのようなことをする方法はありますか?
_ public MyViewModel()
{
SomeMenuCommand = new RelayCommand(
x => DoNothing(),
x => CanSomeMenuCommandExecute());
}
private void DoNothing()
{
}
private bool CanSomeMenuCommandExecute()
{
// this depends on my mood
}
_
これを行う目的は、WPFコマンドの有効/無効状態を制御することだけですが、それは別です。私にとっては早すぎるかもしれませんが、同じことを達成するために、このような方法でx => DoNothing()
ラムダ式を宣言する方法があるに違いないと思います。
_ SomeMenuCommand = new RelayCommand(
x => (),
x => CanSomeMenuCommandExecute());
_
これを行う方法はありますか?何もしない方法は必要ないように思えます。
Action doNothing = () => { };
これは古い質問ですが、この種の状況に役立つコードをいくつか追加すると思いました。 Actions
静的クラスといくつかの基本的な関数を含むFunctions
静的クラスがあります。
public static class Actions
{
public static void Empty() { }
public static void Empty<T>(T value) { }
public static void Empty<T1, T2>(T1 value1, T2 value2) { }
/* Put as many overloads as you want */
}
public static class Functions
{
public static T Identity<T>(T value) { return value; }
public static T0 Default<T0>() { return default(T0); }
public static T0 Default<T1, T0>(T1 value1) { return default(T0); }
/* Put as many overloads as you want */
/* Some other potential methods */
public static bool IsNull<T>(T entity) where T : class { return entity == null; }
public static bool IsNonNull<T>(T entity) where T : class { return entity != null; }
/* Put as many overloads for True and False as you want */
public static bool True<T>(T entity) { return true; }
public static bool False<T>(T entity) { return false; }
}
これは読みやすさをほんの少し改善するのに役立つと思います:
SomeMenuCommand = new RelayCommand(
Actions.Empty,
x => CanSomeMenuCommandExecute());
// Another example:
var lOrderedStrings = GetCollectionOfStrings().OrderBy(Functions.Identity);
これは動作するはずです:
SomeMenuCommand = new RelayCommand(
x => {},
x => CanSomeMenuCommandExecute());
(式ツリーではなく)デリゲートのみが必要な場合、これは機能するはずです。
SomeMenuCommand = new RelayCommand(
x => {},
x => CanSomeMenuCommandExecute());
(これはstatement bodyがあるため、式ツリーでは機能しません。詳細については、C#3.0仕様のセクション4.6を参照してください。)
DoNothingメソッドが必要な理由が完全にはわかりません。
あなただけではできません:
SomeMenuCommand = new RelayCommand(
null,
x => CanSomeMenuCommandExecute());