我开发了一个C#解决方案,要求用户可以自定义显示的实数格式,包括标题,数字和单位。
我允许用户指定一个与string.Format()
的第一个参数完全匹配的格式字符串,这样他就可以按照自己想要的方式调整显示。
例如,{0}: {1:0.00} [{2}]
会显示Flow rate: 123.32 [Nm³/h]
。
用户知道如何使用此格式化功能,{0}是标题,{1}是数字,{2}是数字,并且具有关于.NET格式化所需的最少知识。
但是,在某些时候我必须验证他输入的格式字符串,除了将它用于伪值并以这种方式捕获FormatException
之外我没有找到其他方法:
try
{
string.Format(userFormat, "", 0d, "");
// entry acceptance...
}
catch(FormatException)
{
messageBox.Show("The formatting string is wrong");
// entry rejection...
}
发生错误时,这不是最方便用户的......
可以更优雅的方式验证.NET格式字符串吗?是否有办法在发生故障时向用户提供一些提示?
答案 0 :(得分:1)
很可能更好并且更有效地实现此目的。这只是一种可能的方式。
但这是我想出来的。
public bool IsInputStringValid(string input)
{
//If there are no Braces then The String is vaild just useless
if(!input.Any(x => x == '{' || x == '}')){return true;}
//Check If There are the Same Number of Open Braces as Close Braces
if(!(input.Count(x => x == '{') == input.Count(x => x == '}'))){return false;}
//Check If Value Between Braces is Numeric
var tempString = input;
while (tempString.Any(x => x == '{'))
{
tempString = tempString.Substring(tempString.IndexOf('{') + 1);
string strnum = tempString.Substring(0, tempString.IndexOf('}'));
int num = -1;
if(!Int32.TryParse(strnum, out num))
{
return false;
}
}
//Passes Validation
return true;
}
答案 1 :(得分:0)
你试过了吗?
catch(FormatException fe)
{
messageBox.Show("The formatting string is wrong: " + fe.Message);
// entry rejection...
}