在下面的代码中,虽然我为类型为Person获得了一个typeconverter,但我也可以将它用于Dog类型。 (人与狗的类型彼此无关。)
var person = new Person {Name = "Foo", Age = 99, Ssn = Guid.NewGuid()};
TypeConverter converter = TypeDescriptor.GetConverter(typeof (Person));
string str = converter.ConvertToInvariantString(new Dog());
Console.WriteLine(str);//ConsoleApplication1.Dog
那么在GetConverter方法中传入一个int类型的目的是什么?
答案 0 :(得分:1)
TypeDescriptor.GetConverter(Type type) overload为开发者提供了更多选项。 MSDN声明:
仅当您没有该对象的实例时才调用此方法的此版本。
因此,您应尽可能使用TypeDescriptor.GetConverter(Object o)。
Scott Hanselmann在他的博客文章TypeConverters中有一个很好的例子 - 他使用这种方法进行通用类型识别:
public static T GetTfromString<T>(string mystring)
{
var foo = TypeDescriptor.GetConverter(typeof(T));
return (T)(foo.ConvertFromInvariantString(mystring));
}
使用Object
作为参数的重载不适用于标量数据类型。
<强>更新强>
它会起作用,但你必须多写一行:-P(并添加一个限制):
public static T GetTfromString<T>(string mystring) where T : new()
{
var o = new T();
var foo = TypeDescriptor.GetConverter(o);
return (T)(foo.ConvertFromInvariantString(mystring));
}
GetTfromString<double>("10.5").Dump();