gpt4 book ai didi

c# - 测试字符串是否可以转换为其他各种类型

转载 作者:太空狗 更新时间:2023-10-29 22:20:08 24 4
gpt4 key购买 nike

(已解决)我正在构建一个应用程序,它可以根据 XML 文件中的一些描述动态创建它的一些控件。
我现在需要的是与 TryParse() 方法非常相似的东西:一种检查(不抛出/捕获异常)的可能性,如果字符串变量中的文本可以转换(或解析)为一个类型,我在其他变量中有哪个名称(我的类型)。
问题是 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);
}

最佳答案

我会检查方法 TypeConverter.IsValid ,虽然:

Starting in .NET Framework version 4, the IsValid method catches exceptions from the CanConvertFrom and ConvertFrom methods. If the input value type causes CanConvertFrom to return false, or if the input value causes ConvertFrom to raise an exception, the IsValid method returns false.

这意味着如果您不自己使用 try...catch,您将转换两倍的值。

关于c# - 测试字符串是否可以转换为其他各种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8227232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com