2

我必须将一个对象转换为一个对象,在那里我只有typename一个字符串。

例如:

我有 type-stringSystem.DateTime和 string 2012-09-17T10:19:23.5369243+02:00。现在我想要一个DateTime带有字符串值的对象。

这可能吗?

4

3 回答 3

1

通常这种转换不会通过演员表暴露出来。这有很多原因(对于另一个问题,这可能是一个不错的话题)。

有时,对象的字符串表示对于该对象来说是相当“标准的”。例如,颜色可能总是被序列化为逗号分隔的 RGB 三元组。

当您需要解析的类型引入依赖于语言环境的表示时,事情变得更加困难:例如,日期。在这种情况下,框架设计者决定不引入类似的接口,而是使用第三个对象: s、s 和转换类IParseable来做这种事情。它使您的代码更加复杂,但它允许管理将工作委托给另一个类的非常复杂的转换,请查看:TypeConverterTypeDescriptor

对于原始类型,您甚至可能不需要使用它们:您可以依赖IConvertible接口和System.Convert类。

你不能用强制转换来做到这一点(感谢上帝,在我看来),但你可以编写一个Parse接受 astring并返回你需要的类型的泛型方法,比如:

T Parse<T>(string value)

我记得有一个不错的开源类型转换库(Universal Type Converter)。它使用可能找到的将类型转换为另一种类型的所有内容来管理大量转换(例如,想象一下您可以为一个bool值使用多少种不同的字符串表示形式)。即使您不直接使用它,您也应该阅读文章以了解它是如何工作的(并查看源代码以了解极端情况是如何处理的)。

于 2012-09-17T08:36:39.650 回答
1

您的问题的答案可以在所有其他答案中找到,等待拼凑。:)

  1. 从您的类型字符串中获取类型,就像 akhisp 所说:

    Type dateTimeType = Type.GetType("System.DateTime");
    
  2. 现在,使用类型转换器将字符串更改为 DateTime:

    object date = Convert.ChangeType("2012-09-17T10:19:23.5369243+02:00", dateTimeType);
    
于 2012-09-17T12:42:01.000 回答
0

我要做的是使用 Type.GetType(String) 方法来获取对象的类型。然后我会调用 Activator.CreateInstance(Type Object[]) 来构造该对象的实例,假设您知道有一个接受字符串的构造函数。

于 2012-09-17T08:25:46.187 回答