【发布时间】:2019-03-23 00:00:51
【问题描述】:
我有两个预定义的结构
Context // x86
Context64 // x64
我正在尝试基于流程架构创建这些结构之一的实例。例如,如果它被编译为 x86,它将创建一个 Context 的实例,如果它被编译为 x64,它将创建一个 Context64 的实例
我无法形成一个语句,该语句将根据程序编译的内容在两个实例之间进行交换
到目前为止,我已经尝试了以下方法
var compiledAsx64 = Environment.Is64BitProcess;
var context = compiledAsx64 ? new Context64() : new Context();
还有
var compiledAsx64 = Environment.Is64BitProcess;
dynamic context = compiledAsx64 ? new Context64() : new Context();
但是,两者都返回错误,表明两者之间没有隐式转换
我试图避免产生多个变量。这可能吗?如果可以,我该如何实现?
【问题讨论】:
-
请问
Context和Context64结构是什么? -
唯一可以包含两者的变量类型是
object,然后您将不断地装箱/拆箱以使用它。如果它们是类,那么可能会有一些继承技巧。 -
问题与处理器架构完全无关。您试图将变量设置为不同的类型
-
根据您需要此功能的位置,您可以只引入一个编译器开关,例如
#IF x86 var a = Context #ELSE var a = Context64。 -
没有一个结构类型的变量可以同时保存这两种类型的值,您需要使用多个变量或忍受将它们装箱成对象的后果。对于后者,您可以使用接口,将它们转换为类,或者使用动态的、不同的选择、不同的性能特征。
标签: c#