gpt4 book ai didi

c# - TypeConverter 无法从某些基本类型转换为相同的基本类型

转载 作者:可可西里 更新时间:2023-11-01 08:25:27 24 4
gpt4 key购买 nike

为什么那些返回 true:

  TypeDescriptor.GetConverter(typeof(double)).CanConvertTo(typeof(double));
TypeDescriptor.GetConverter(typeof(int)).CanConvertTo(typeof(int));

什么时候返回false

  TypeDescriptor.GetConverter(typeof(decimal)).CanConvertTo(typeof(decimal));
TypeDescriptor.GetConverter(typeof(bool)).CanConvertTo(typeof(bool));

考虑到 GetConverter 返回的所有转换器应该只将类型与字符串进行相互转换的事件:

我正在使用 .NET Framework 4.5.2。

最佳答案

DecimalConverter(以及 DoubleConverterInt32Converter)覆盖 CanConvertTo 以指示它可以转换为字符串(因为这就是 base.CanConvertTo 所做的)和所有 CLR 基元类型。来自 the Reference Source :

public override bool CanConvertTo(ITypeDescriptorContext context, Type t) 
{
if (base.CanConvertTo(context, t) || t.IsPrimitive) {
return true;
}
return false;
}

decimal 从 CLR 的角度来看不是原始类型,因此转换器在传递 typeof(decimal) 时返回 false

BooleanConverter 不会覆盖 CanConvertTo,因此它属于基本实现,它只允许转换为 string:

public virtual bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) 
{
return (destinationType == typeof(string));
}

如果您要问为什么要这样设计,那么只有框架设计人员可以回答,但我怀疑这是因为检查您是否尝试从一种类型进行转换是一项微不足道的检查相同类型。

考虑到它们的目的是将非字符串类型与字符串相互转换,以便在属性网格、XAML 等中显示,因此它不完全支持非字符串转换也就不足为奇了。

关于c# - TypeConverter 无法从某些基本类型转换为相同的基本类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875975/

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