我怎么能告诉替代的格式化字符串是多少?
-
27-09-2019 - |
题
鉴于下面的方法:(真实方法有几个更多的参数,但重要的有以下...)
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)
是有效的。
您真的需要提供更多信息这要回答的问题确定...
您可以为支架格式化器做一个正则表达式,然后比较它们的数值阵列的长度。
不隶属于 StackOverflow