DecimalConverter
次の単純なコンソールプログラムで示されているように、とクラスで問題が発生し、Int32Converter
一貫性のない結果が返されるようです。
using System;
using System.ComponentModel;
class App
{
static void Main()
{
var decConverter = TypeDescriptor.GetConverter(typeof(decimal));
Console.WriteLine("Converter: {0}", decConverter.GetType().FullName);
Console.WriteLine("CanConvert from int to decimal: {0}", decConverter.CanConvertFrom(typeof(int)));
Console.WriteLine("CanConvert to int from decimal: {0}", decConverter.CanConvertTo(typeof(int)));
Console.WriteLine();
var intConverter = TypeDescriptor.GetConverter(typeof(int));
Console.WriteLine("Converter: {0}", intConverter.GetType().FullName);
Console.WriteLine("CanConvert from int to decimal: {0}", intConverter.CanConvertTo(typeof(decimal)));
Console.WriteLine("CanConvert to int from decimal: {0}", intConverter.CanConvertFrom(typeof(decimal)));
}
}
これからの出力は次のとおりです。
Converter: System.ComponentModel.DecimalConverter
CanConvert from int to decimal: False
CanConvert to int from decimal: True
Converter: System.ComponentModel.Int32Converter
CanConvert from int to decimal: False
CanConvert to int from decimal: False
TypeConvertersを正しく理解していない限り、次のことが当てはまります。
TypeDescriptor.GetConverter(typeof(TypeA)).CanConvertFrom(typeof(TypeB))
と同じ結果が得られるはずです
TypeDescriptor.GetConverter(typeof(TypeB)).CanConvertTo(typeof(TypeA))
少なくともとの場合は、そうではSystem.Int32
ありSystem.Decimal
ません。
私の質問はこれです:これが仕様によるものかどうか誰かが知っていますか?または、C#のネイティブタイプのTypeConvertersは実際に壊れていますか?