使用GetType()进行转换

32 c# reflection casting

是否可以将对象强制转换为返回的类型GetType()?我想要一个可以接受对象(对于匿名类型)的泛型方法,但然后返回一个对象强制转换为匿名类型.我一直在考虑使用LCG DynamicMethod在容器类上构建一个方法,但我无法弄清楚它会是什么样子.使用该GetType()方法进行强制转换的想法是能够获取匿名类型并将对象强制转换为其实际类型,而无需实际知道类型.

最重要的目标是将匿名类型的对象粘贴到容器中,然后我可以在方法之间共享和传递.

Dav*_*ier 40

我想不出为什么你想要转换为GetType(),因为你无法对结果有用,而无需在编译时知道类型.

也许你正在寻找的是能够转换.如果是这种情况,以下内容适合您:

object input = GetSomeInput();
object result = Convert.ChangeType(input, someOtherObject.GetType());
Run Code Online (Sandbox Code Playgroud)

我们在从注册表中读取值时使用它,这些值都存储为字符串,然后使用反射将它们填充到属性中.

  • 注意:GetSomeInput()返回的类型必须实现IConvertible(自上而下).我认为内在的.NET CLR类型都可以.;) (3认同)
  • 我改变了答案。虽然 convert 很有帮助,但它返回一个对象。我真正需要的是返回的实际类型。 (2认同)

Mar*_*ell 15

你的意图很不清楚; 然而,一种选择是泛型MakeGenericMethod,特别是.你想用这个做什么?例如:

static class Program
{
    static void Main()
    {
        object obj = 123.45;
        typeof(Program).GetMethod("DoSomething")
            .MakeGenericMethod(obj.GetType())
            .Invoke(null, new object[] { obj });
    }
    public static void DoSomething<T>(T value)
    {
        T item = value; // well... now what?
    }    
}
Run Code Online (Sandbox Code Playgroud)

所以现在我们有了值,double通过泛型输入- 但除了调用其他泛型方法之外,我们仍然无法用它做什么......你想在这里做什么?