我的问题非常类似于:Cast to type known only at runtime,但是并没有真正回答(它也是C语言而不是C#语言)。

我正在写一些东西来控制某些硬件,并且根据给定的硬件配置,我必须使用“字节”或“ UInt32”类型进行一些按位运算。位算术代码很长,但在32位和8位情况下是相同的,唯一的区别是某些循环(32或8)的长度。

我当前的解决方案是使用开关,这意味着我在一个巨大的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


我四处搜寻,知道答案可能与泛型和反射有关,但我不知道该怎么做。

最佳答案

您可能会考虑为此使用BitArray-您可以从字节或uint32对其进行初始化,进行按位运算,然后在末尾将其转换回原位,例如

    object value;
    bool isByte = value is byte;
    BitArray ba = isByte
        ? new BitArray(new byte[] { (byte)value })
        : new BitArray(BitConverter.GetBytes((unint32)value));
   ...

关于c# - 创建仅在运行时(C#)已知类型的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16723001/

10-12 05:27