2011-09-22 121 views
6

有无论如何检查一个string.format参数是否有效的参数,如string.TryFormat。有没有一种方法string.TryFormat工作类似于string.Format?

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

我用这个方法在我的UI及其缓慢,当一个异常被逮住,所以我想知道如果有使用更好的方法noticable。

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

将无效字符串格式将是这样的String.Format( “格式{0} {1} {2}”,新的字符串[] { “一”, “B”})

+0

你在[MSDN文档](http://msdn.microsoft.com/en-us/library/system.string_methods.aspx)中找到了什么? (我假设你在讨论.Net运行时,虽然你没有真正说过......) –

+0

是的,我应该提到ia m在谈论.Net运行时。但是我没有在MSDN文档中找到我需要的东西 –

+0

你想要做什么?听起来好像你正在使用一个强有力的解决方案,当有可能有更好的方法来做到这一点。 – Enigmativity

回答

7

唯一System.String.TryFormat方法可以工作的方式是捕获可能从IFormattable.ToString的各种实现中抛出的任何异常(尽管String.TryFormat可以用错误标志返回来替换它自己的某些异常,这样做同时允许TryFormat的异常转义不会非常有帮助)。

更糟糕的是,TryFormat方法无法知道IFormattable.ToString引发的任何异常是不应该被捕获的东西。即使IFormattable.ToString合约要求如果格式说明符无效,执行应该不会泄漏除FormatException以外的其他任何内容,但如果某些输入对象无效但尝试对它们进行格式化,则可能需要String.TryFormat方法返回false(而不是抛出)并没有造成任何恶化,如果尝试格式化物品的行为本身导致腐败,则会发生例外情况。不幸的是,异常层次结构的设置方式,String.TryFormat甚至无法开始接近这样的语义。

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

+0

谢谢你的深入解释 –

相关问题