[英]c# <dynamic> casting or conversion
我正在使用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>
列表。 我在這里有點茫然。
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));
在調用方法之前,您的List<object> data
不能為空。 如果您執行Console.WriteLine(data.Last());
肯定會得到結果,而不是Console.WriteLine(data[0])
因此,列表中的第一項為double數組。 如果要查看從該數組中打印出來的值,可以手動遍歷它們,或者如果對象是數組,則可以使用以下代碼打印出數組項目,否則只需打印項目值即可。
if (data[0].GetType().IsArray)
{
Console.WriteLine(string.Join(",", ((Array)data[0]).Cast<object>()));
}
else
{
Console.WriteLine(data[0]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.