我正在使用NI ADC做一些工作。我正在读取AO和AI到List<dynamic>
的电压,我在console.writeLine上遇到了一些问题。
我正在使用动态类型,因为程序需要在运行时而不是编译时决定应该存储什么数据。
因此,因为每当我想要打印列表的内容时,它都不知道我在问什么,所以它返回存储的类型,而不是所选的元素数据。
public void createTask(DataGrid grid, List<Object> data, float sampleRate, int sampleAmount, ComboBox channel, float minRange, float maxRange)
{
using (Task myTask = new Task())
{
myTask.AIChannels.CreateVoltageChannel(channel.Text, "",
(AITerminalConfiguration)(-1), minRange, maxRange, AIVoltageUnits.Volts); // create the task to measure volts
myTask.Timing.ConfigureSampleClock("", sampleRate, SampleClockActiveEdge.Rising, // create the timing
SampleQuantityMode.ContinuousSamples, sampleAmount);
AnalogMultiChannelReader reader = new AnalogMultiChannelReader(myTask.Stream);
myTask.Control(TaskAction.Verify);
data.Add(reader.ReadSingleSample());
Console.WriteLine(data[0]);
}
}
反过来打印System.Double[]
。我将如何打印出元素实际存储的内容而不是其类型?我已经尝试了很多不同的方法来尝试获得我想要的东西,但我正在努力使用C#语法(我使用C ++) - 只使用它三个星期。
我试过了;
<double>
列表。我在这里有点不知所措。
答案 0 :(得分:1)
1)您可以迭代数组
double[] data = new double[] { 1, 2, 3 };
foreach (var item in data)
Console.WriteLine(item.ToString());
2)或
Console.WriteLine(string.Join(",", data));
如果你已经有一个double数组,上面的解决方案就可以了。 在您的情况下,如果您确定data [0]是double数组,则可以使用as运算符
double[] temp = data[0] as double[];
Console.WriteLine(string.Join(",", temp));
答案 1 :(得分:1)
在致电您的方法之前,您的List<object> data
必须为空。如果您Console.WriteLine(data.Last());
代替Console.WriteLine(data[0])
,则肯定会得到结果
答案 2 :(得分:1)
所以列表中的第一个项目是double数组。如果要查看打印出的数组中的值,可以手动迭代它们,或者如果对象是数组,则可以使用以下代码打印数组项,否则只需打印项值。
if (data[0].GetType().IsArray)
{
Console.WriteLine(string.Join(",", ((Array)data[0]).Cast<object>()));
}
else
{
Console.WriteLine(data[0]);
}