首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法指定一个“空的”C#λ表达式?

有没有办法指定一个“空的”C#λ表达式?
EN

Stack Overflow用户
提问于 2009-11-16 23:46:10
回答 5查看 49.8K关注 0票数 132

我想声明一个“空的”lambda表达式,它什么也不做。有没有一种方法可以在不需要DoNothing()方法的情况下做这样的事情?

代码语言:javascript
复制
public MyViewModel()
{
    SomeMenuCommand = new RelayCommand(
            x => DoNothing(),
            x => CanSomeMenuCommandExecute());
}

private void DoNothing()
{
}

private bool CanSomeMenuCommandExecute()
{
    // this depends on my mood
}

我这样做的目的只是为了控制我的WPF命令的启用/禁用状态,但这是另外一件事。也许现在对我来说太早了,但我想一定有一种方法可以像这样声明x => DoNothing()的lambda表达式来完成同样的事情:

代码语言:javascript
复制
SomeMenuCommand = new RelayCommand(
    x => (),
    x => CanSomeMenuCommandExecute());

有什么方法可以做到这一点吗?似乎不需要什么都不做的方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-16 23:48:52

代码语言:javascript
复制
Action doNothing = () => { };
票数 261
EN

Stack Overflow用户

发布于 2012-12-28 23:17:31

我想我应该添加一些我发现对这种情况有用的代码。我有一个Actions静态类和一个Functions静态类,其中包含一些基本函数:

代码语言:javascript
复制
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; }
}

我相信这只会稍微提高可读性:

代码语言:javascript
复制
SomeMenuCommand = new RelayCommand(
        Actions.Empty,
        x => CanSomeMenuCommandExecute());

// Another example:
var lOrderedStrings = GetCollectionOfStrings().OrderBy(Functions.Identity);
票数 23
EN

Stack Overflow用户

发布于 2009-11-16 23:48:12

这应该是可行的:

代码语言:javascript
复制
SomeMenuCommand = new RelayCommand(
    x => {},
    x => CanSomeMenuCommandExecute());
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1743013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档