无论如何,检查string.format参数是否是有效的参数,如string.TryFormat。
try
{
string.Format(Format, new string[Selectors.Count]); //
}
catch (Exception)
{
return false;
}
我在我的UI中使用这个方法,并且当捕获到异常时它很慢并且很明显,所以我想知道是否有更好的方法可以使用。
我总是可以编写自己的方法,但我想知道是否有预定义的方法。
无效字符串格式类似于此字符串。格式(“格式{0} {1} {2}”,新字符串[] {“a”,“b”})
答案 0 :(得分:8)
System.String.TryFormat
方法可以工作的唯一方法是捕获可能从IFormattable.ToString
的各种实现中抛出的任何异常(尽管String.TryFormat
可以替换它自己的一些异常一个错误标志返回,这样做,同时让TryFormat
中的异常逃脱不会非常有帮助。)
更糟糕的是,TryFormat
方法无法知道IFormattable.ToString
抛出的任何异常是否可能是不应被捕获的内容。即使IFormattable.ToString
契约要求实现不应泄漏FormatException
以外的任何内容,如果格式说明符无效,可能需要String.TryFormat
方法返回false(而不是抛出)if一些输入对象是无效的,但尝试格式化它们并没有使任何更糟糕的事情,而如果尝试格式化项目的行为本身导致了损坏,则泄漏异常。不幸的是,设置异常层次结构的方式,String.TryFormat
甚至无法开始接近这种语义。
简单地说,String.TryFormat
方法除了使用try
/ catch
块来抑制内部方法抛出的异常之外,其他方法并不多。有一个正常的含义是TryXX
方法在故障情况下应该比在try-catch块中只做XX
的消费者例程更好。如果TryFormat
方法只是通过扼杀异常来起作用,那么也可以让消费者处理它。