什么是最优雅的lambda表达式(动作),用于不执行任何操作?

24

我目前有以下代码:

    BCLThread bclThread = new BCLThread(() => Thread.Sleep(0));

因为我想不到其他表达方式来说明我实际上不希望那个方法执行某些操作。是否有其他更优雅的方法来实现这一点?

谢谢


6
你为什么要创建一个什么都不做的线程? - fejesjoco
6
不做任何事情 - 但是要并行进行,以免干扰其他正在闲置的线程 :-) - marc_s
4
我是否实际上问了一些需要背景信息才能回答的问题? - devoured elysium
6
我知道这是一个旧帖子,但我会为了澄清而发表评论。这是空对象模式的一种实现方式。它不是在每个调用操作的地方都检查操作是否为空,而是设置默认行为,如果未明确设置操作,则使用“什么也不做”的行为。将“什么也不做”作为默认操作允许您调用操作而无需检查空值,并且如果未明确设置操作,则没有任何后果。 - jmblackmer
2
我支持@jmblackmer的观点,有些情况下创建一个什么也不做的 Action 是非常有用的。其中一种情况是替换所有条件检查为预先定义的 Action。我进行了性能测试,结果发现在大量迭代时速度要快得多。 - Matt
显示剩余5条评论
3个回答

35

为什么不呢?

BCLThread bclThread = new BCLThread(() => {});

?


不知道这个!{}是什么作用?它们在哪些其他情境中可以使用? - devoured elysium

18
Action a = delegate { };
Action b = () => { };

0

只是想提供一个替代方案,来代替() => {}(我认为这个很接近规范)。

如果你有一个代码风格强制器/自动格式化程序,不允许在同一行上使用{},我也看到过将0分配给discard的方法。

Action a = () => _=0;

可能比这更干净

Action a = () => 
{
};

所以

new BCLThread(() => _=0);

如果以稍微不那么优雅的方式来说,我会认为这也传达了“什么都不做”的意思。 这两个例子生成的IL代码完全相同。

(来源)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接