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

时间:2018-03-09 15:07:12

标签: c# arrays types

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

提前致谢

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

2 个答案:

答案 0 :(得分:1)

这取决于您的逻辑以及您是否需要执行特定于intshort或您使用的任何类型的任何操作 - 例如基本数学运算。

如果您不需要这样的操作,可以声明这样的方法并将其传递给缓冲区:

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

答案 1 :(得分:0)

有不同的方法可以做到这一点。非常糟糕的那些像动态(非常糟糕,我不会描述它,因为它会导致你走向错误的方向)。

更好的像object []。虽然我建议您检查是否确实需要在一个变量中存储不同的类型,但您可以将其声明为object []:

object[] buf =olBuffer.GetDataAsVolts();

如果要使用它,您将不得不在以后投射该数据:

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

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

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

double dValue=(double) ushortValue

double dValue=Convert.ToDouble(uShortValue)

但请确保,在按照这种方式进行投射之前,范围和精度符合您的要求。

但是再次:使用正确的类型检查是否有更好的方法。 C#变量总是需要一个类型。