我正在对带有缓冲区的数据采集程序进行更改,其中类型取决于表单中的用户输入。目前,相同的代码被写入 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
这取决于你的逻辑,以及你是否需要做任何特定于int
、short
或你使用的任何类型的操作——比如基本的数学运算。
如果不需要此类操作,可以声明如下方法并将其传递给缓冲区:
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# 变量始终需要类型。