C#中OPC DA返回二维数组打印截断及索引访问问题
解决OPC DA订阅中二维数组的访问与完整打印问题
一、解决索引访问报错(CS0021)
e.Vtq.Value的类型是object,编译器无法识别它是二维数组,直接用索引会报错。需要先将其转换为object[,]类型,再进行索引访问:
public void func_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded) { // 先判断并转换为二维object数组 if (e.Vtq.Value is object[,] twoDArray) { // 正常通过索引访问元素 object firstElement = twoDArray[0, 0]; Console.WriteLine($"[0,0]元素: {firstElement ?? "null"}"); // 如果知道元素是特定类型(比如string),可直接强转 if (twoDArray[0, 3] is string statusMsg) { Console.WriteLine($"状态信息: {statusMsg}"); } } } }
二、完整打印二维数组(避免截断)
默认Console.WriteLine(e.Vtq.Value)会截断长数组内容,需要手动遍历所有元素并拼接成完整字符串:
public void func_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded && e.Vtq.Value is object[,] twoDArray) { int rowCount = twoDArray.GetLength(0); int colCount = twoDArray.GetLength(1); // 用StringBuilder高效拼接内容 var sb = new StringBuilder(); sb.AppendLine($"数组尺寸: {rowCount}行 × {colCount}列"); sb.AppendLine("{"); for (int i = 0; i < rowCount; i++) { sb.Append(" {"); for (int j = 0; j < colCount; j++) { // 处理null元素,避免空引用 sb.Append(twoDArray[i, j]?.ToString() ?? "null"); if (j < colCount - 1) sb.Append(", "); } sb.Append("}"); if (i < rowCount - 1) sb.AppendLine(","); } sb.AppendLine("}"); Console.WriteLine(sb.ToString()); } }
整合后的完整方法
把两个需求合并到同一个方法里:
public void func_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded && e.Vtq.Value is object[,] twoDArray) { // 1. 访问指定索引元素 object element = twoDArray[0, 0]; Console.WriteLine($"[0,0]元素值: {element ?? "null"}"); // 2. 完整打印整个二维数组 int rowCount = twoDArray.GetLength(0); int colCount = twoDArray.GetLength(1); var sb = new StringBuilder(); sb.AppendLine($"[{rowCount}, {colCount}] {{"); for (int i = 0; i < rowCount; i++) { sb.Append(" {"); for (int j = 0; j < colCount; j++) { sb.Append(twoDArray[i, j]?.ToString() ?? "null"); if (j < colCount - 1) sb.Append(", "); } sb.Append("}"); if (i < rowCount - 1) sb.AppendLine(","); } sb.AppendLine("}"); Console.WriteLine(sb.ToString()); } }
内容的提问来源于stack exchange,提问作者Mdarende
相关产品推荐
相关产品推荐

