gpt4 book ai didi

c# - 使用 Type 变量进行转换

转载 作者:行者123 更新时间:2023-11-30 19:05:29 25 4
gpt4 key购买 nike

下面的代码不起作用,我想知道如何将实例动态转换为运行时确定的类型?

Convert.ChangeType() 返回一个仍然需要转换的对象。所有对 Invoke()、GetConstructor() 或 Activator.CreateInstance() 的尝试也是如此,请参见下文。在某些时候我需要在代码中显式转换,我希望避免它或尽可能将它推出。

Type type = Type.GetType ("RandomChildClass");
Object obj = Activator.CreateInstance (type, new Object[]{ "argument" });
var instance = (type)obj;

我知道我可以创建一个方法来接受 ,但我仍然有同样的问题不知道如何用动态随机类型调用它 Casting a variable using a Type variable

最佳答案

不可能使用类型 来确定表达式的类型。 (泛型类型参数不同于值,因为它们被编码到类型系统中。)

变量的值来自运行时 代码执行,而表达式类型是编译时 构造。不用说,编译发生在代码运行之前,因此不可能使用变量进行转换。

Reflection (虽然笨重)或 dynamic (这基本上是更易于使用的反射)允​​许针对通用对象类型的表达式调用任意方法或访问属性/字段——这有时被称为“后期绑定(bind)”。但是,调用操作的表达式类型仍然是对象。

Interfaces可用于统一不同的类实现以实现正确的静态类型。然后可以将新创建​​的对象转换为需要的适用接口(interface)。与其他表达式一样,该类型是编译时构造(因此必须直接指定接口(interface)),但代码现在不受特定类的限制。

如果创建一个系统以便直接在静态类型 (C#) 代码中使用这些“动态类”,并且可以保证接口(interface)或将接口(interface)限制在一个较小的集合中,那么使用接口(interface)可能是最干净的方法:例如var myAction = (IMyAction)obj。否则,回退到动态访问 - 直接或在外观之后。

关于c# - 使用 Type 变量进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com