2016-01-05 37 views
2

我對C#相當陌生,但我正在尋找將對象轉換爲無符號短褲的數組。原始數據是作爲對象傳遞的WORD(數值WORD)數組。我嘗試了以下,但不斷收到錯誤。將對象轉換爲c#中的Ushort數組#

object temp = Agent.Port("PumpPressure1_01").Value; 
ushort[] PP1_01 = ((IEnumerable)temp).Cast<object>() 
            .Select(x => x == null ? x.ToUshort()) 
            .ToArray(); 

當我運行此我得到以下錯誤:

'System.Collections.Generic.IEnumerable<T>' requires '1' type arguments. 

我時,我得到上述錯誤的命名空間是:

using System.Linq; 
using System.Text; // Don't think this is required but added it in case 

如果我添加下面的命名空間:

using System.Collections; 
using System.Collections.Generic; 

我ge t出現以下錯誤。

'System.Linq.ParalleIEnumerable.Select<TTSource,TResult>()' is not supported by the language 

我敢肯定,這是一個明顯的問題,但我一直在狩獵淨一會兒,並不能找到一個解決方案。我最好的猜測是Select函數是不正確的,因爲它最初設計用來將一個對象轉換爲一個字符串數組。

任何幫助將是偉大的。

感謝

+2

這不是合法的語法,你能提供真實的代碼嗎? '.Select(x => x == null?x.ToUshort())'。另外,如何定義'.ToUshort'? –

回答

0

感謝您的所有幫助和反饋。

不幸的是我沒有足夠重視已發佈的警告,這似乎是導致問題的原因。

Warning: Reference to type 'System.Func '2' claims it is defined in 'c:\Windows\Microsoft.NET\Framework64\v2.0.50727mscorlib.dll'. but it could not be found 

似乎.NET參考有一些問題。我有另一個虛擬機,我測試了下面的解決方案,它似乎工作沒有問題。看起來我必須重新安裝軟件包才能在我想使用的VM上運行。

我正在使用的軟件包是一個自定義軟件包,它使用C#構建預構建類似於即插即用模塊的解決方案。您可以將塊從一個塊的輸入/輸出連接到另一個塊。然後,您可以在塊內部構建C#代碼。基本上,C#爲假人像我..

塊的例子:

Example of the blocks:

至於代碼,我也不得不作出一些變化如下,但現在工作的享受。 Agent.Port(「PumpPressure1_01」)。Value.RawValue用於引用塊上的特定端口。

object temp = (object)Agent.Port("PumpPressure1_01").Value.RawValue; 

UInt16[] PP1_01 = ((System.Collections.IEnumerable)temp).Cast<object>() 
    .Select(x => Convert.ToUInt16(x)) 
    .ToArray(); 

foreach(UInt16 x in PP1_01) 
{ 
    Agent.LogDebug("values: " + x.ToString()); 
} 

再次感謝您的幫助。現在只需要解決庫引用的問題。

0

IEnumerable的是一個通用的接口,所以你必須聲明你正在使用的數據類型...

說實話,雖然,我要檢查什麼調用

object temp = Agent.Port("PumpPressure1_01").Value; 

實際上是返回 - 通過在調試器中檢查它...如果它只是簡單地返回一個數值類型數組的引用,您應該能夠簡單地將其轉換。你正在做的是試圖在數組中投射每個單獨的項目 - 我懷疑這不是你應該做的 - 這將是投射數組本身。

你能給我們任何關於Agent對象的Port方法的API文檔,所以我可以看到它是什麼意思返回?你可以嘗試檢查,看看有什麼給你?

0

如果您的temp變量已經是object類型,爲什麼要投射到IEnumerable然後將其重新投射回object

另外IEnumerable<T>是一個通用的接口,並且必須指定確切的類型(正如你所說的異常)。如果你有一個整數陣列,你想與他們合作,它應該是IEnumerable<int>