如图所示,数据类型来自没有方法或属性的类,但当我将鼠标悬停在它上面时,它会显示项目。
另外,当我尝试使用foreach命令时出现错误。
此外,它不能转换为List或Dictionary或Stringp []。 请指导我开展工作。感谢
private void button2_Click(object sender, EventArgs e)
{
var a1 = new OPCServer();
var anOPCDAServers=new OPCServer();
var serverName="FARATARH-PC";
var AllOPCDAServers = new List<string>();
var asw = anOPCDAServers.GetOPCServers("FARATARH-PC");
//Console.WriteLine(typeof(asw).ToString);
foreach (var item in asw)
{
//AllOPCDAServers.Add(item);
}
//var nod = AllOPCDAServers[4];
//a1.Connect(serverName, );
}
答案 0 :(得分:1)
asw是一个动态对象数组。不要使用var类型循环而是使用dynamic
作为类型。
foreach (dynamic item in aswItems)
{
// code here
}
答案 1 :(得分:0)
理论上,你可以做到
string[] foo = asw;
并与此合作。
答案 2 :(得分:0)
尝试使用AsEnumerable()来枚举数组。
foreach(var item in asw.AsEnumerable())
{
}
答案 3 :(得分:0)
String [*]表示可以具有除零之外的下限的数组。它们与常规字符串[]不兼容,但您仍然可以将其强制转换为System.Array并以此方式使用它。所以试试
IEnumerable<string> oOPCList;
oOpcServer = new RsiOPCAuto.OPCServer();
oOPCList = ((Array)(object)oOpcServer.GetOPCServers()).Cast<string>();
foreach(var item in oOPCList)
...
由于以下情况,需要首先向[{1}},然后向object
,然后通过Array
通过IEnumerable<string>
进行奇怪的广告投放:
Cast<string>
会返回GetOPCServers
类型。尝试以任何方式访问该动态实例 - 即使通过调用dynamic
也会触发GetType
。因此,首先需要将其强制转换为InvalidCastException
,因此它不再是动态类型。之后,我们可以将其转换为object
,这是C#中唯一支持的非零数组工作方式。但Array
并非强类型,因此我们将调用追加到Array
以获得强类型的可枚举。