转换为仅在运行时通过其字符串名称知道的类型。 C#

时间:2013-03-15 17:59:00

标签: string types casting

我在这里遇到了问题。 (C#)

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

像:

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

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

我需要对返回的值进行一些操作。 为此,我需要正确地投射它们才能访问其成员等。

限制:

  • 我不能使用“动态”,因为我的代码需要在较旧的框架中完成:3.5(因为互操作问题)。
  • 我需要对MANY返回的不同类型的值进行操作(当然没有常用接口或基类,“对象”除外)
  • 我所拥有的只是一个表(包含字符串值),将参数名称与返回的类型相关联。
  • 是的,我可以将该表转换为biiig“switch”语句,不是很好,不要那样。

任何提示??

1 个答案:

答案 0 :(得分: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 });