无论如何,是否有必要检查string.format参数是否为有效参数,例如string.TryFormat。

try
{
    string.Format(Format, new string[Selectors.Count]); //
}
catch (Exception)
{
    return false;
}

我在UI中使用此方法,并且在捕获到异常时它缓慢且引人注目,因此我想知道是否有更好的方法可以使用。

我总是可以编写自己的方法,但是我想知道是否有一个预定义的方法。

无效的字符串格式将类似于此string.Format(“Format {0} {1} {2}”,new string [] {“a”,“b”})

最佳答案

System.String.TryFormat方法唯一可行的方法是捕获可能从IFormattable.ToString的各种实现中引发的任何异常(尽管String.TryFormat可以用错误标志返回替换其自身的某些异常,这样做是在使TryFormat的异常转义的情况下,不会很有帮助)。

更糟糕的是,TryFormat方法无法知道IFormattable.ToString抛出的任何异常是否是不应捕获的东西。即使IFormattable.ToString契约(Contract)要求如果格式说明符无效,实现也不应泄漏FormatException以外的任何东西,但如果某些输入对象无效,则可能希望String.TryFormat方法返回false(而不是抛出),而是尝试对其进行格式化。并没有使任何情况变得更糟,同时泄漏了一个异常,如果尝试格式化项目的行为本身导致了损坏。不幸的是,通过建立异常层次结构的方式,String.TryFormat甚至无法开始处理这种语义。

简而言之,除了使用String.TryFormat/try块来抑制内部方法抛出的异常外,catch方法没有什么可以做的。有一个正常的暗示,即在失败情况下,TryXX方法应该比仅在try-catch块中执行XX的消费者例程更好。如果TryFormat方法无论如何都可以通过扼杀异常来工作,那么它也可以让使用者处理。

关于.net - 是否存在类似于string.Format的方法string.TryFormat?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7513961/

10-11 23:08
查看更多