(已解決)我正在構建一個應用程序,它可以根據XML文件的一些描述動態地創建一些控件。
我現在需要的是與TryParse()方法非常相似的東西:如果字符串變量中的文本可以轉換(或解析)爲類型,則可以檢查(不拋出/捕獲異常)其他變種(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