gpt4 book ai didi

c# - 找出我是否可以将值转换为特定类型的更优雅的方法

转载 作者:太空狗 更新时间:2023-10-29 21:38:39 26 4
gpt4 key购买 nike

我现在正在处理一些遗留代码,这些代码通常使用 try + catch结合 Convert.ToDecimal(someString) (例如)尝试将字符串转换为小数。由于某些原因,我必须使用这样的设置 - 在调试时 - 我会在每次抛出的异常(不仅是用户未处理的异常)处停止,所以这很烦人,我将其更改为使用 TryParse尽可能的方法。

现在我遇到了一个 object值(value)和目标 Type ,我只想知道是否可以将值转换为目标类型。现在这是按如下方式完成的:

try
{
Convert.ChangeType(val, targetType);
}
catch
{
// Do something else
}

实际结果并不重要,不再进一步使用。

虽然这段代码现在可以正常工作,但正如我所说,它有点烦人,所以我想知道:是否有另一种方法可以在不捕获异常的情况下执行上述操作?

我想到了类似 IsAssignableFrom 的东西在 Type 上,但这似乎不适用于我的情况(我不想分配,我想知道是否可以显式转换)。

最佳答案

如果你的意思是转换,那么你可以使用 is 关键字,如:

object someObject = GetSomeObject();
if (someObject is string)
{
..
}

但请注意,转换和 Convert.ChangeType 是不一样的。例如,您不能将字符串转换为 int:

string numberString = "15";
int number = (int)numberString;

但是你可以为它使用ChangeType:

string numberString = "15";
int number = (int)Convert.ChangeType(numberString, typeof(int));

编辑:

如果您需要测试变量是否可转换为特定类型,那么为什么不将 try-catchConvert.ChangeType 包装到测试方法中:

public bool IsConvertibleTo<T>(object value)
{
try
{
T convertedValue = (T)Convert.ChangeType(value, typeof(T));
return true;
}
catch (InvalidCastException)
{
return false;
}
catch (FormatException)
{
return false;
}
catch (OverflowException)
{
return false;
}
}

关于c# - 找出我是否可以将值转换为特定类型的更优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646014/

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