如何很好地调用具有副作用的财产?

时间:2014-05-16 12:24:24

标签: c#

这纯粹是一种语言问题,因为我知道,这可能(甚至可能应该)以不同的方式解决

我们有一个属性Prop,它的getter有一些副作用。如何"打电话"这个属性在" nice"触发这些副作用的方法?

一种方式:

object dummy = this.Prop;

但这似乎不是一个很好的解决方案,因为它涉及创建不必要的变量。我尝试过:

(() => this.Prop)();

但它没有编译。有简短而干净的方法吗?

1 个答案:

答案 0 :(得分:6)

如果你创建了一个变量,那么你会得到代码抱怨它没有被使用,这可能很烦人。

对于基准测试用例,我有时会添加一个通用的Consume()扩展方法,它什么都不做:

public static void Consume<T>(this T ignored)
{
}

然后你可以写:

this.Prop.Consume();

并且编译器会很高兴。另一种方法是设置一个接受Func<T>的方法:

public static void Consume<T>(Func<T> function)
{
    function();
}

然后将其称为:

Consume(() => this.Prop);

很少在测试之外面对这种情况(两个基准测试,&#34;我应该能够调用该属性而不会抛出异常&#34;测试)但是每隔一段时间它就会< em>可以有用,例如强制一个类被初始化。只要你发现自己想要这个,就值得考虑这是否更适合作为一种方法。