将类型传入TypeDescriptor.GetConverter方法的目的是什么?

时间:2014-06-01 20:48:13

标签: c#

在下面的代码中,虽然我为类型为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类型的目的是什么?

1 个答案:

答案 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();