【发布时间】:2011-11-22 12:59:59
【问题描述】:
(已解决)我正在构建一个应用程序,该应用程序可以根据 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 呢?
-
您为什么要在名为 CanConvert 的函数中转换值?你不能只做“return converter.CanConvertFrom(typeof(string))”
-
@PVitt:这只是关于“最佳实践”,我读过您应该避免使用正常程序操作处理异常。我相信这就是为什么 TryParse() 方法与 Parse() 一起存在的原因。老实说,如果有比这更好的方法,可以让我做我需要的,我更喜欢那个。 :)
-
@Grrbrr404:你说得对,
CanConvertFrom(typeof(string))在该代码中不是必需的。我已经修改了帖子。 -
类似于我之前提出的一个问题:stackoverflow.com/q/8122604/250725
标签: c# visual-studio-2010 .net-4.0