【发布时间】:2013-05-19 08:21:53
【问题描述】:
我的问题与 Cast to type known only at runtime 非常相似,但是那个问题并没有得到真正的回答(它也是用 C 而不是 C#)。
我正在编写一些东西来控制一些硬件,并且根据给定的硬件配置,我必须使用“byte”或“UInt32”类型进行一些按位运算。位算术代码很长,但在 32 位和 8 位情况下是相同的,唯一的区别是某些循环的长度(32 或 8)。
我目前的解决方案是使用 switch,这意味着我在一个巨大的 if 语句中几乎有两个相同代码的副本。
另一种解决方案是使用数组或 0 和 1 而不是 UInt32 或字节来执行按位运算,然后在最后转换为 UInt32 或字节。
我在这里最感兴趣的最后一个解决方案是动态选择我将在运行时使用的类型。这是我想要的一些伪代码:
System.Type MyType;
if (something)
MyType=type1;
else
MyType=somethingElse;
myType someVariable; //Create a variable of type myType. This line will give an
//error
someVariable=(myType) otherVariable //do an example typecast with the
//runtime-determined type
我四处搜索知道答案可能与泛型和反射有关,但我不知道该怎么做。
【问题讨论】:
-
一旦你创造了价值,你打算用它做什么?你打算如何对其进行算术运算?
-
你打算用 someVariable 做什么?由于直到运行时才知道它是什么类型,因此您将很难针对它编写代码。你需要做什么的细节将决定如何让类型系统很好地配合......
-
如果唯一的区别是循环的数量,为什么不弄清楚呢? for (int i = 0; i
标签: c# generics dynamic reflection