C# 使用具有不同类型(double、uint、ushort)但名称相同的缓冲区



我正在对带有缓冲区的数据采集程序进行更改,其中类型取决于表单中的用户输入。目前,相同的代码被写入 3 次,除了以下代码中使用的 buf 变量声明不同。接下来的代码行是相同的。下面的代码片段使用了 3 次,这使得代码比需要的更大。如何在没有类型的情况下声明 buf 变量,然后在 if 结构中给它一个类型,并仅使用 buf var 编写代码 1 次?我是 C# 的新手,并尝试像我在 Java 中学到的那样在 ifs 中声明为 void 和强制转换,但似乎找不到解决方案......

提前致谢

if(...){
      double[] buf = olBuffer.GetDataAsVolts(); 
      /* 
      or ushort[] buf = olBuffer.GetDataAsRawUInt16(); 
      or ushort[] buf = olBuffer.GetDataAsRawUInt16();
      */
}
//lots of code using the buf var

这取决于你的逻辑,以及你是否需要做任何特定于intshort或你使用的任何类型的操作——比如基本的数学运算。

如果不需要此类操作,可以声明如下方法并将其传递给缓冲区:

private void WorkWithBuffer<T>(T[] buffer) {
    // lots of code with your buffer
}

有不同的方法可以做到这一点。非常糟糕的,比如动态(太糟糕了,我不会描述它,因为它会把你引向错误的方向(。

还有更好的,比如对象[]。虽然我鼓励你检查你是否真的需要在一个变量中存储不同的类型,但你可以将其声明为 object[]:

object[] buf =olBuffer.GetDataAsVolts();

稍后,当您想要使用它时,您必须强制转换该数据:

double[] dbuf=(double[])buf;

也许您并没有真正以不同的类型保存数据,但在内部始终可以使用相同的类型。因此,简单地将其强制转换为允许两个值的类型可能更有用。

双倍应该能够存储您的 ushort 值。您可以简单地转换或转换它:

double dValue=(double) ushortValue

double dValue=Convert.ToDouble(uShortValue)

但是,在以这种方式铸造之前,请确保范围和精度符合您的要求。

但同样:通过使用正确的类型检查是否有更好的方法。C# 变量始终需要类型。

最新更新