无法将对象类型“System.String[*]”转换为类型“System.String[]”

Man*_*ino 4 .net c# casting visual-studio-2010 opc

大家好,我在 C# .NET 中遇到了一个问题,我正在使用 DLL 连接到 OPC 服务器,该 DLL 在 VB.NET 项目中使用,并且工作完全没有问题。

我试图在 ListBox 中显示可用服务器的列表,VB.NET 中使用的代码(并且有效)是这样的:

Dim AllOPCServers As Object
AllOPCServers = AnOPCServer.GetOPCServers

' Load the list returned into the List box for user selection
Dim i As Short
For i = LBound(AllOPCServers) To UBound(AllOPCServers)
    AvailableOPCServerList.Items.Add(AllOPCServers(i))
Next i
Run Code Online (Sandbox Code Playgroud)

我写这个是为了在 C# 应用程序中使用

try
{
    var _listOPCServer = _OPCServer.GetOPCServers();
    foreach(var i in _listOPCServer)
    {
        string serverName = (string)i;
        listServers.Items.Add(serverName);
    }             
}
catch (Exception exc)
{
    lstMsg.Items.Add(DateTime.Now + " Error al Obtener Lista de OPC's: " + exc.Message);
}
Run Code Online (Sandbox Code Playgroud)

在“本地”选项卡上的“调试”模式下显示:

_listOPCServer | {字符串[1..2]} | 动态{字符串[]} |

[1]        |  "Server01"    | string  
[2]        |  "Server02"    | string
Run Code Online (Sandbox Code Playgroud)

更新:

我在“foreach(var i in _listOPCServer )”行中收到错误

无法将对象类型“System.String[*]”转换为类型“System.String[]”

这才是真正的错误。

我确信我做错了什么,有人可以帮助我吗?

Man*_*ino 5

好吧,我找到了解决这个问题的方法,这只是你建议的一个改进

 Array _listOPCServer = (Array)(object)_OPCServer.GetOPCServers();               

            foreach(object i in _listOPCServer)
            {
                string serverName = (string)i;
                listServers.Items.Add(serverName);
            }             
Run Code Online (Sandbox Code Playgroud)

我只在声明中添加了(对象)并且工作正常,现在我可以按照我想要的方式显示服务器列表

或者也这样做

Array _listOPCServer = (Array)(object)_OPCServer.GetOPCServers();               

            foreach(object i in _listOPCServer)
            {
                listServers.Items.Add(i);
            }
Run Code Online (Sandbox Code Playgroud)

再次非常感谢您的帮助和时间!