【发布时间】:2011-10-28 05:21:18
【问题描述】:
在最新版本的C#中,如果你事先知道类型,是否可以将动态类型转换为强类型?
我正在使用反射来调用对象上的方法,该方法返回一个var:
var returnVal = context.GetType().InvokeMember(MethodName, BindingFlags.InvokeMethod, null, context, lParams.ToArray());
我可以轻松地将类型返回到returnVal。是否可以将 Thin 转换为更强类型的版本?
为清晰而编辑:
在这种情况下,我知道返回的类型,但只知道字符串。要获取类型,我必须这样做:
diAssemblies[k].GetType(diAssemblies[k].GetName().Name + "." + returnType)
其中returnType 是要返回的类型的名称。
理想情况下,我希望能够将方法调用的结果放入强类型字段中。
上下文
我正在从目录加载包含 .edmx 文件的程序集,然后在这些上下文中调用方法。在运行时,加载程序不知道它将加载哪些程序集。但是,使用加载器的人会知道程序集、方法和类型。
这是通过实体框架(使用存储过程)围绕数据库调用创建一个通用包装器,该包装器将在其他地方重用。
【问题讨论】:
-
您实际上是否使用
dynamic?var和dynamic完全不同,不清楚你的意思。 -
如果你在执行时只知道它是一个字符串,你怎么可能期望它在编译时是强类型的?
-
我不知道它在这里会有什么不同。我现在正在使用
var,但如果可以完成工作,没有什么能阻止我使用dynamic -
嗯,你想用返回值做什么还不清楚。如果你只知道执行时的类型,你能用这个值做什么?请给我们更多的背景信息。
-
这正是我想检查它是否可能的原因!我的直觉是它不是,但是这些地方的人对语言非常好