在我的 C# 项目中,我得到一个字符串 [,] 类型对象作为输出。当我想将输出打印到控制台或文件时,输出被截断。为什么?

问题描述 投票:0回答:1

我有以下方法,我正在订阅 OPC DA 服务器项目。

public  void read_OPC_items(string ip)
{
    using (var client = new EasyDAClient())
    {
        client.ItemChanged += func_ItemChanged;                
        client.SubscribeMultipleItems(
            new[] {                           
                    new DAItemGroupArguments(ip, "OPC.IwSCP.1", item_name, 1000, null),
                });                
    }
}

public void func_ItemChanged(object sender, EasyDAItemChangedEventArgs e)
{            
    if (e.Succeeded)
    {           
         Console.WriteLine(e.Vtq); // result of item
         Console.WriteLine(e.Vtq.Value)
    }
}

当我将结果打印到控制台时,我得到类似的信息:

[6, 14] {{1, 1, 0, UPS 电池故障。, 45305.2620848611, ...}, {1, 1, 0, UPS 电池故障。, 45304.9276650694, ...}...} 系统对象[,]

从打印的行中我了解到对象 e.Vtq 是一个 2D 数组。 结果只是部分正确。数组中只有 2 行 5 列显示正确。正如您所看到的,二维数组的其余部分被“...”截断。如何打印完整的结果而不被截断?

另外:如何通过索引访问 2D 对象的元素?

当我尝试下面的方法时,它不起作用。我得到:错误 CS0021 无法将 [] 索引应用于类型的表达式

string element_of_2darray = e.Vtq.Value[0, 0];
c# object casting
1个回答
0
投票

一些背景知识。关于这两个对象的官方文档是

正如您所看到的 Value 是对象类型(几乎每个对象都继承自 object),因此您无法将其作为数组访问,除非您对其进行类型转换(坏主意)。

它可能打印为二维数组这一事实没有任何意义,因为我可以在 C# 中做任何事情通过重写 ToString() 函数。

还有 Vtq.ValueType 可能会帮助您进行特定情况的处理。

© www.soinside.com 2019 - 2024. All rights reserved.