2016-03-08 94 views
1

enter image description here我有c#項目,其中數據類型對我而言未知。在.NET中將動態System.String [*]轉換爲System.String []類型#

如圖所示,數據類型來自沒有方法或屬性的類,但當我將鼠標懸停在其上時,它顯示項目。

另外,當我嘗試使用foreach命令時出現錯誤。

此外,它不能轉換爲列表或字典或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

+2

歡迎來到Stack Overflow。請將代碼*作爲文本*放在您的問題中,同時將錯誤消息*作爲文本*。截圖可用於獲取更多信息,但代碼應始終以文本形式出現,並附帶上下文描述(在本例中,您正在與COM對象交談......) –

+0

將'if(asw is System。 Collections.IEnumerable)'before your foreach'並檢查是否可以枚舉 –

+0

是的,令人驚訝! –

回答

0

在theorie,你可以只是做

string[] foo = asw; 

,並與這方面的工作。

+0

它不起作用。它提供了和不受歡迎的錯誤。它是:無法將System.String [*]轉換爲System.String [] –

1

asw是一個動態對象數組。不要使用var類型來代替使用dynamic作爲類型。

foreach (dynamic item in aswItems) 
{ 
    // code here 
} 
+0

再次未處理的錯誤,無法將System.String [*]轉換爲System。字符串[] –

+0

你可以發佈完整的錯誤。另外發布你的代碼不是截圖。 – CarbineCoder

0

試着拋出AsEnumerable(),它允許枚舉數組。

foreach(var item in asw.AsEnumerable()) 
{ 
} 
+0

AsEnumerable()沒有爲system.array定義。它有類型:System.string [*} –

0

字符串[*]表示的陣列,可以有一個下限不是零。它們與常規字符串[]不兼容,但您仍然可以將其轉換爲System.Array並以此方式處理它。因此,嘗試

IEnumerable<string> oOPCList; 

oOpcServer = new RsiOPCAuto.OPCServer(); 
oOPCList = ((Array)(object)oOpcServer.GetOPCServers()).Cast<string>(); 
foreach(var item in oOPCList) 
    ... 

奇怪投先object,然後Array,然後通過Cast<string>IEnumerable<string>是因爲以下的需要:

GetOPCServers會返回一個dynamic類型。試圖以任何方式訪問該動態實例 - 即使通過調用GetType觸發InvalidCastException。因此,它首先需要投射到object,因此它不再是動態類型。之後,我們可以將它轉換爲Array,這是C#中唯一支持的方式,用於處理非基於零的數組。但Array不是很強類型,所以我們追加Cast<string>的調用以獲得強類型枚舉。

source

+0

好主意,但還沒有工作。再次相同的未處理的錯誤。 –

+0

@Amir_Controller什麼錯誤說?你能用代碼和完整的錯誤信息更新你的問題嗎? –

+0

好的,只要你把它作爲'dynamic'我更新了答案。 –

相關問題