(решено) Я создаю приложение, которое может динамически создавать часть его элемента управления на основе некоторого описания из файла XML.
Теперь мне нужно нечто очень похожее на метод TryParse (): возможность проверить(без исключения throwing / catching), если текст в строковой переменной может быть преобразован (или проанализирован) в тип, имя которого у меня есть в другом variabe (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);
}