首页 > 解决方案 > 在没有工厂的情况下有条件地推迟昂贵的调用

问题描述

这更像是一个理论问题。假设我有以下代码

object ExpensiveOperation()
{
    // some expensive computation
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
void DoIf(bool condition, object expensiveValue)
{
    if (condition)
    {
        // do something with expensiveValue
    }
}

void Foo()
{
    bool maybe = new Random().Next() % 2 == 0;
    DoIf(maybe, ExpensiveOperation());
}

是否可以将方法调用推迟到ExpensiveOperation()块内if

排除以下选项:

最后,我希望在condition调用ExpensiveOperation(). 如果这仅在 jitting 后发生在 asm 级别(通过优化),那很好。它不需要可靠,我只是好奇它是否可能。除了工厂,我想不出别的办法。

同样,这是一个人工样本,比其他任何东西都更多的理论制作。

标签: c#

解决方案


推荐阅读