有没有办法指定一个“空”的C#lambdaexpression式?
我想声明一个“空的”lambdaexpression式,没有什么。 有没有办法做这样的事情,而不需要DoNothing()
方法?
public MyViewModel() { SomeMenuCommand = new RelayCommand( x => DoNothing(), x => CanSomeMenuCommandExecute()); } private void DoNothing() { } private bool CanSomeMenuCommandExecute() { // this depends on my mood }
我这样做的意图只是控制我的WPF命令的启用/禁用状态,但这是一个旁白。 也许这对我来说太早了,但是我想一定有办法像这样以某种方式声明x => DoNothing()
lambdaexpression式来完成同样的事情:
SomeMenuCommand = new RelayCommand( x => (), x => CanSomeMenuCommandExecute());
有没有办法做到这一点? 似乎没有必要使用无所事事的方法。
Action doNothing = () => { };
这是一个古老的问题,但我想我会添加一些我发现这种情况有用的代码。 我有一个dynamic静态类和一个Functions
静态类与他们的一些基本function:
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());
假设你只需要一个委托(而不是一个expression式树),那么这应该工作:
SomeMenuCommand = new RelayCommand( x => {}, x => CanSomeMenuCommandExecute());
(这对于expression式树来说是无效的,因为它有一个语句体 ,详细信息请参阅C#3.0规范的4.6节。)
我不完全明白你为什么需要一个DoNothing方法。
你不能只是做:
SomeMenuCommand = new RelayCommand( null, x => CanSomeMenuCommandExecute());