(已解决)我正在构建一个应用程序,它可以根据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