是否有一个方法string.TryFormat类似于string.Format?

时间:2011-09-22 11:24:31

标签: .net string exception

无论如何,检查string.format参数是否是有效的参数,如string.TryFormat。

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

我在我的UI中使用这个方法,并且当捕获到异常时它很慢并且很明显,所以我想知道是否有更好的方法可以使用。

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

无效字符串格式类似于此字符串。格式(“格式{0} {1} {2}”,新字符串[] {“a”,“b”})

1 个答案:

答案 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方法只是通过扼杀异常来起作用,那么也可以让消费者处理它。