0

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

我正在使用这种方法:

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

来自元数据手册:

回报:

一个类型为conversionType 且其值与value 等效的对象。-或-如果value 为null 且conversionType 不是值类型,则为空引用(Visual Basic 中为Nothing)。

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

4

4 回答 4

4

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

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

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

于 2012-07-17T14:50:27.517 回答
1

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

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

于 2012-07-17T14:51:18.913 回答
1

还,

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

*

value
一个实现 IConvertible 接口的对象。

*

于 2012-07-17T14:52:24.723 回答
1

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

考虑PersonManMan定义为

class Man : Person

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

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

相反,您将创建一种方法:

Person GetByName(string name);

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

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

MyType myObject = (MyType)ChangeType(value, typeof(MyType));
于 2012-07-17T14:55:39.710 回答