在.net C#中将动态System.String [*]转换为System.String []类型

时间:2016-03-08 11:14:46

标签: c# .net type-conversion

enter image description here我有c#项目,其中我不知道数据类型。

如图所示,数据类型来自没有方法或属性的类,但当我将鼠标悬停在它上面时,它会显示项目。

另外,当我尝试使用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, );




    }

screenshot

4 个答案:

答案 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以获得强类型的可枚举。

source