gpt4 book ai didi

c# - 使用反射在运行时转换类型?

转载 作者:行者123 更新时间:2023-11-30 19:30:53 25 4
gpt4 key购买 nike

请看下面的代码:

        var val1 = ExtractValue(firstParam);
var val2 = ExtractValue(secondParam);

var type1 = val1.GetType();
var type2 = val2.GetType();

TypeConverter converter1 = TypeDescriptor.GetConverter(type1);
TypeConverter converter2 = TypeDescriptor.GetConverter(type2);

if (converter1 != null && converter1.CanConvertFrom(type2))
{
var temp = converter1.ConvertFrom(val2);
return val1.Equals(temp);
}
return false;

当我尝试使用“int”和枚举对象时,这段代码没有返回真值,这对我来说是个谜。我什至在立即窗口中尝试了“val1.Equals((int)(val2))”,结果为真,但 converter1.CanConvertFrom(type2) 仍然为假。

你能帮我解决一下吗?有什么我想念的吗?

谢谢

最佳答案

通用类型转换在 .NET 中非常差且不一致(在我看来)。但是对于 Enum/int 的情况,您可以使用 IConvertible接口(interface),或 Convert相关实用程序类:

int converted = (int)Convert.ChangeType(MyEnum.MyValue, typeof(int));

object converted = Convert.ChangeType(myValue, myExpectedType);

作为网站说明,这个 100% 免费的图书馆位于:CodeFluentRuntimeClient 有一个名为 ConvertUtilities 的类,它有一堆 ChangeType 方法重载(包括通用方法重载),这些方法非常通用并且对类型转换很有用。

关于c# - 使用反射在运行时转换类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392476/

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