鉴于下面的方法:(真实方法有几个更多的参数,但重要的有以下...)

public string DoSomething(string formatter, params string[] values)
{
    // Do something eventually involving a call to String.Format(formatter, values);
}

有没有办法判断自己的价值观阵列中有足够的对象涵盖了格式化,这样我可以抛出一个异常,如果没有(短做的String.format的;这是不是一种选择直到结束由于一些拉姆达转换)?

有帮助吗?

解决方案

我还不太清楚为什么你认为你不能使用string.Format进行测试。如果在格式传递应该有价值观的项目占位符,那么你应该能够做到这一点:

static void TestFormat(string formatter, params string[] values)
{
    try
    {
        string.Format(formatter, values);
    }
    catch (FormatException e)
    {
        throw new Exception("the format is bad!!", e);
    }
}

示例用法:

        TestFormat("{0}{1}{2}", "a", "b", "c"); // works ok
        TestFormat("{0}{1}{2}", "a", "b"); // throws exception
        TestFormat("{0}{1}{2}}0{", "a", "b", "c"); // throws exception

试图用一个正则表达式来做到这将是艰难的,因为什么事情是这样的:

"{0}, {1}, {abc}, {1a4} {5} }{"

{abc} {1a4}不适用于string.Format,并且还必须确定每个有效数字({0}, {1}, {5}),您有至少许多参数。此外,}{将导致的String.format失败以及

我只是用上面最近的一个项目描述了前一种方式,它的工作太棒了。

其他提示

我觉得你太担心这一点。如果格式字符串是无效的,让string.Format抛出该异常为您服务。如果你不想被抛出FormatException做,赶上它,扔你想要的例外。

应该还算不上是你已经做了一个问题,有的一些处理(如评估拉姆达转换),因为这毕竟是一个例外情况(有可能是例外的lambda表达式是非常昂贵的,在这种情况下,首先做的string.Format测试不处理的参数,以检查它是否有效,然后重复它,当你以后需要后处理)。

使用一个正则表达式来计算的模板的数量,但要小心,因为

string.Format("{0}{0}", 123)

是有效的。

您真的需要提供更多信息这要回答的问题确定...

您可以为支架格式化器做一个正则表达式,然后比较它们的数值阵列的长度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top