Cannotconvertobjecttype'System.String'totype'System.String'大家好,我有一个C#.NET的代码有问题,我在VB.NET项目中使用DLL连接OPC服务器没有问题。我试图在ListBox中显示可用服务器的列表,在VB.NET中使用(和工作)的代码是这样的:DimiAsShortFori=LBound(AllOPCServers)ToUBound(AllOPCServers)AvailableOPCServerList.Items.Add(AllOPCServers(i))接下来我在C#应用程序中使用try{var_listOPCServer=_OPCServer.GetOPCServers();foreach(variin_listOPCServer){stringserverName=(string)i;listServers.Items.Add(服务器名称);}}catch(Exceptionexc){lstMsg.Items.Add(DateTime.Now+"ErroralObtenerListadeOPC's:"+exc.Message);在Local选项卡上以Debug模式显示:_listOPCServer|{字符串[1..2]}|动态{字符串[]}|[1]|“服务器01”|字符串[2]|“Server02”|字符串更新:我得到的错误是“foreach(variin_listOPCServer)”无法将对象类型“System.String[*]”转换为类型“System.String[]”,这是实际错误。我确定我做错了什么,有人可以帮助我吗?好的,我找到了解决这个问题的方法,它只是您建议的一种模式Array_listOPCServer=(Array)(object)_OPCServer.GetOPCServers();foreach(_listOPCServer中的对象i){stringserverName=(string)i;listServers.Items.Add(服务器名称);我刚刚在声明中添加了(object)并且它工作正常,现在我可以按照我想要的方式显示服务器列表或者Array_listOPCServer=(Array)(object)_OPCServer.GetOPCServers();foreach(_listOPCServer中的对象i){listServers.Items.Add(i);再次感谢您的帮助和时间!在处理不符合数组的类型时,VB.NET非常精明。不要犹豫,使用它,.NET使语言之间的交互变得容易。问题是OPC是基于COM的标准。您正在使用的服务器正在返回一个不符合下限的SAFEARRAY,第一个索引是1。不是0。在COM中不常见,在0和1之间选择,因为第一个数组索引就像字节顺序问题或辩论是否番茄是一种水果或蔬菜(它是一种水果。小端是正确的蔬菜)。然而,0作为下界是C#在处理一维数组时所坚持的。它采用“向量”,一种独特的数组类型,始终具有下限为0的一维。.NET运行时中有很多优化。得到的不匹配,所以映射到一维的多维数组。不是您可以用C#语言表达的数组类型。您可以在C#中破解它,但您必须显式使用Array类型。像这样的东西,为了清楚起见拼写出来:Arrayservers=(Array)_OPCServer.GetOPCServers();intfirst=servers.GetLowerBound(0);intlast=servers.GetUpperBound(0);for(intix=first;ixHans关于基于零的数组和基于非零的数组之间的区别是正确的,但我仍然不明白为什么你会得到那个异常。我的猜测是你将_OPCServer声明为动态,它将延迟类型绑定到运行时。所以_listOPCServer也是动态的。由于您正在迭代数组并提取字符串,编译器可能试图将对象转换为字符串[],Hans指出这是无效的.你应该可以通过_listOPCServer转换为Array,_listOPCServer使用foreach:以上是C#学习教程:无法将对象类型'System.String'转换为类型'System.String'的所有内容共享,如果它对大家有用,需要了解更多C#学习教程,希望大家多多关注---Array_listOPCServer=(Array)(_OPCServer.GetOPCServers());foreach(variin_listOPCServer){//etc.文章收集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
