我正在使用缓冲区更改数据采集程序,其中类型取决于表单中的用户输入。目前,相同的代码被写入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
答案 0 :(得分:1)
这取决于您的逻辑以及您是否需要执行特定于int
,short
或您使用的任何类型的任何操作 - 例如基本数学运算。
如果您不需要这样的操作,可以声明这样的方法并将其传递给缓冲区:
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#变量总是需要一个类型。