我還不清楚你爲什麼認爲你不能用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失敗。
我剛剛在最近的一個項目中使用了上述的前一種方法,並且效果很好。
來源
2010-06-16 21:01:40
dcp
那麼你可以解析格式化字符串,但你能詳細說明爲什麼你不能只調用string.Format? – Skurmedel 2010-06-16 20:55:28
因爲他不想做他的lambda工作,直到他知道他有足夠的參數... – 2010-06-16 20:58:35
看看源代碼。如果他們能夠弄清楚有多少令牌,那麼你也應該這樣做。 – 2010-06-16 21:22:08