如何延迟参数值计算?

时间:2010-08-30 19:06:06

标签: .net .net-3.5

static class MyClass
{
    static void Main()
    {
        bool b1 = false;
        if ( b1 )
        {
            throw new MyException(GetText(b1));
        }
    }

    public static string GetText(bool bFlag)
    {
        if ( bFlag==false )
        {
            throw new Exception("'GetText' method should not be called when condition is 'false');
        }
        return "Some error text";
    }
}

在上面的示例中,一切正常(我的意思是当条件b1为'True'时,'MyException'将使用正确的文本生成。如果条件为'False'则不会发生任何事情

我想为我的异常类提供一些帮助方法:

class MyException : Exception
{
    public void FailIfTrue(bool bCondition, string strErrorMessage)
    {
        if ( bCondition )
        {
            throw new Exception(strErrorMessage);
        }
    }
}

在这种情况下,“Main”方法将更改为另一个方法:

static class MyClass
{
    static void Main()
    {
        bool b1 = false;
        MyException.FailIfTrue(
            b1, 
            GetText(b1)
            );
    }
}

在这种情况下,'GetText'方法将被调用...

问题:

你是否看到任何好的解决方法或解决方案来创建一个只有在'FailIfTrue'函数内需要结果时才会调用'GetText'的帮助器?

欢迎任何想法。

谢谢。

1 个答案:

答案 0 :(得分:2)

实际上,我看到了一种解决方法(不是传递字符串参数,而是传递Func):

public void FailIfTrue(bool bCondition, Func<string> funcErrorMessage)
{
    if ( bCondition )
    {
        throw new Exception(funcErrorMessage());
    }
}

但不确定这是否是最好的。

请指教!