(解決済み)XMLファイルの説明に基づいて、コントロールの一部を動的に作成できるアプリケーションを構築しています。
私が今必要とするのは、TryParse()メソッドと非常によく似たものです。文字列変数のテキストを型に変換することができれば、(wihtout throwing/catching exception)他の変異体(myType
)。
問題myType
は、.NETのタイプのいずれかとすることができるということです。DateTime, Bool, Double, Int32
など文字列を他のさまざまな型に変換できるかどうかをテストします。
例:
string testStringOk = "123";
string testStringWrong = "hello";
string myType = "System.Int32";
bool test1 = CanCovertTo(testStringOk, myType); //true
bool test2 = CanCovertTo(testStringWrong, myType); //false
どうCanCovertTo(string testString, string testType)
機能は次のようになりますでしょうか?
は、私が手に最も近いコード以下の通りです:間違った文字列から変換しようとしながら
private bool CanCovertTo(string testString, string testType)
{
Type type = Type.GetType(testType, null, null);
TypeConverter converter = TypeDescriptor.GetConverter(type);
converter.ConvertFrom(testString); //throws exception when wrong type
return true;
}
しかし、それは例外をスローし、そして私はそのためtry {} catch()
を使用しません。
ソリューション:
private bool CanCovertTo(string testString, string testType)
{
Type type = Type.GetType(testType, null, null);
TypeConverter converter = TypeDescriptor.GetConverter(type);
return converter.IsValid(testString);
}
なぜ、try/catchを使用したくないのですか? – PVitt
なぜCanConvertという名前の関数で値を変換しようとしていますか?あなたは単に "return converter.CanConvertFrom(typeof(string))"を返すことはできませんか? – Grrbrr404
@PVitt:これはちょうど「ベストプラクティス」の話ですが、通常のプログラムアクションで例外を扱わないようにすべきです。私はそれがTryParse()メソッドがParse()と一緒に存在する理由だと考えています。正直なところ、これよりも優れた方法があれば、私が必要なことをすることができ、私はそれを好む。 :) – mj82