2011-09-22 6 views
6

は、String.Formatの引数がstring.TryFormatのような有効な引数の何かがあるかどうかを確認するためにとにかくあります。メソッドstringにはありますか?stringFormatと同様の動作をするtryFormat?

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

例外がcatchedされたとき、私は私のUIとその遅いと顕著で、この方法を使用していますので、使用するより良い方法がある場合、私は思っていました。

私はいつも自分自身のメソッドを書くことができますが、私は、事前定義された1があるかどうかを知りたいと思いました。

無効な文字列形式は、このString.Formatのようなものであろう( "形式{0} {1} {2}"、新たな文字列[] { "A"、 "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方法は仕事ができる方法がString.TryFormatTryFormatエスケープからの例外をさせながらではないだろうとやって、エラーフラグリターンで、独自の例外の一部を置き換えることができますが、(IFormattable.ToStringの様々な実装からスローされる可能性のあるすべての例外をキャッチすることです非常に参考になります)。

さらに悪いことに、TryFormatメソッドは、IFormattable.ToStringによってスローされた例外がキャッチされるべきではないものかどうかを知る方法を持っていません。 IFormattable.ToString契約は書式指定子が無効だった場合の実装がFormatException以外を漏洩してはならないことが求めた場合でも、入力オブジェクトの一部が無効であったが、それらをフォーマットしようとする場合、1は、おそらく偽(というよりも投げ)返すようにString.TryFormat方法を望みます項目をフォーマットしようとする行為自体が腐敗を引き起こした場合、例外を漏らしながら、何も悪化させなかった。残念なことに、例外階層が設定される方法は、String.TryFormatがそのようなセマンティクスに近づき始めることすらできません。

try/catchブロックを使用する以外に、String.TryFormatメソッドが内部メソッドによってスローされた例外を隠す以外には、あまり効果がありません。ただtry-catchブロックでXXをした消費者の日常的であるよりTryXXメソッドが失敗する場合には、より良い動作するようになっていることを、通常の含意があります。 TryFormatメソッドが単純に例外を抑止して動作する場合、消費者がそれを処理できるようにすることもできます。

+0

ありがとうございます –

関連する問題