ChangeType方法中的一些误解

时间:2012-07-17 14:47:41

标签: c# .net

我是c#的新手,所以也许我的问题对你们这些人来说似乎很幼稚。

我正在使用这种方法:

public static object ChangeType(object value, Type conversionType);

来自元数据手册:

  

返回:

     
    

类型为conversionType且其值相等的对象     重视 - 或 - A.                  null引用(在Visual Basic中为Nothing),如果value为null且为conversionType                  不是值类型。

  

但是在方法签名中,返回的类型总是“对象”。那么,如果返回的类型是object,那么转换值有什么好处?

4 个答案:

答案 0 :(得分:4)

Convert.ChangeType创建一个指定类型的新对象,其值等于您传递的对象。

例如,Convert.ChangeType("42", typeof(int))将返回一个盒装int实例,而不是字符串。

实际行为完全在您传递的对象的IConvertible实现中。

答案 1 :(得分:1)

原因是您可以投射到您的特定类型。这个方法来自泛型类型,因此它可以返回任意数量类型之一的唯一方法是返回所有类型的超类型,即对象。当然,您可以将其转换为您选择的类型,并保证您将获得成功,但唯一的另一种选择是每种类型的重载都会有点重。 :)

需要注意的是,这不仅仅与投射相同。它将返回一个全新的对象,它是您要求的类型,而不是您给它的类型。

答案 2 :(得分:1)

此外,

来自msdn文档:http://msdn.microsoft.com/en-us/library/aa324833(v=vs.71).aspx

*

  

value
一个实现IConvertible接口的Object。

*

答案 3 :(得分:1)

在.net方法中有一个固定的签名(泛型你可以更进一步,但这不是这里的情况) - 所以对于这种转换方法,他们选择了最常见的类型:object

考虑PersonManMan定义为

class Man : Person

为了创建地址簿,您不会创建两个方法:

Man GetByName(string name);
Woman GetByName(string name);

相反,你会创建一个方法:

Person GetByName(string name);

此方法会返回Person,即使返回的实际对象是Man,您目前所知道的只是Person

回到转换器:知道你在参数中提供它的返回类型,但是很久以前当创建方法时他们不知道你要提供什么作为参数。您可以安全地将结果转换为您已知的类型:

MyType myObject = (MyType)ChangeType(value, typeof(MyType));