【发布时间】:2014-06-26 13:33:42
【问题描述】:
我正在使用 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++)上苦苦挣扎 - 只使用了三周。
我试过了;
- 铸造
- ToString() 转换
- 使用 CopyTo 将整个列表的内容复制到
<double>列表。
我在这里有点不知所措。
【问题讨论】:
-
通常您的对象只需覆盖
ToString()方法即可提供有意义的字符串结果。但是在这种情况下,您似乎还存储了这些对象的 集合(特别是数组)。我建议您将打印工作传递给实用程序方法,该方法检查对象是否实现IEnumerable,如果是,则在其上迭代打印每个元素而不是打印集合。 -
很有趣,虽然我不确定我是否完全理解你刚才所说的。您能否通过检查对象是否实现
IEnumerable向我解释什么是实用程序方法以及您的意思 -
dynamic 是 C# 中的关键字,不等同于 object。 msdn.microsoft.com/en-ca/library/dd264736.aspx
-
reader.ReadSingleSample() 的返回类型是什么?双[]?
标签: c# type-conversion adc nidaqmx