2013-03-15 37 views
0

我在这里遇到问题。 (C#)将其转换为仅在运行时通过其字符串名称知道的类型。 C#

在另一个程序集中存在一个集合(我无法更改它),它将一个字符串作为参数并返回一个对象。

喜欢:

object Value = ThatCollection.GetValue("ParameterName"); 

的问题是,对于每个参数的字符串,它返回一个不同类型的对象。 我想要的是将这些对象转换为它们各自的类型,仅在运行时才知道它们的字符串名称。

我需要做一些操作与那些返回的值。 而且为了访问他们的成员等,我需要正确地施放它们。

限制:

  • ,因为我的代码需要我不能使用“动态”在旧的框架来完成:3.5(因为互操作性问题)。
  • 我需要使用MANY返回的不同类型的值进行操作(当然没有公共接口和基类,当然除了“object”)
  • 我只有一个表(包含字符串值)将参数名与他们返回的类型。
  • 是的,我可以将该表转换成biiig“switch”语句,不是很好,不想要。

任何提示?

回答

0

你想看看反射,类似下面应该努力对象转换型T.建立一个简单的投法:

public static T CastToType<T>(object o) 
    { 
     return (T)o; 
    } 

调用此使用反射:

Type t = Type.GetType(stringName) 
    MethodInfo castTypeMethod = this.GetType().GetMethod("CastToType").MakeGenericMethod(t); 
    object castedObject = castTypeMethod .Invoke(null, new object[] { obj }); 
+0

这很有趣。但是由于结果仍然是“客体”,所以我陷入了同一个观点。我需要的对象已经是我想要的类型,但是作为对象。我试图找出一种明确的类型,我相信我不能逃避“开关”。 – 2013-03-15 20:00:34

+0

我可以通过反射获得运算符(不只是方法)吗? – 2013-03-15 20:02:27

+0

我不认为有没有一种好的方法可以在没有开关的情况下做你想做的事情,在某些时候你需要知道你正在处理的类型与它进行交互。 – 2013-03-15 21:45:31

相关问题