[英]Convert Object to an array of Ushort in c#
我是C#的新手,但我希望將對象轉換為無符號短褲數組。 原始數據是作為對象傳遞的WORD(數字值WORD)的數組。 我嘗試了以下操作,但始終出現錯誤。
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;
我收到以下錯誤。
'System.Linq.ParalleIEnumerable.Select<TTSource,TResult>()' is not supported by the language
我敢肯定這是一個明顯的問題,但是我已經搜尋了一段時間了並且找不到解決方案。 我最好的猜測是Select
函數是不正確的,因為它最初旨在將對象轉換為字符串數組。
任何幫助都會很棒。
謝謝
IEnumerable是一個通用接口,因此您必須聲明所使用的數據類型。
不過,老實說,我想檢查一下該調用
object temp = Agent.Port("PumpPressure1_01").Value;
實際上正在返回-通過在調試器中檢查它...如果它只是返回對數字類型數組的引用,則應該能夠對其進行簡單轉換。 不過,您正在執行的是嘗試將數組中的每個項目都強制轉換-我懷疑那不是您應該執行的操作-這將強制轉換數組本身。
您能給我們關於Agent對象上Port方法的任何API文檔,以便我了解它返回什么意思嗎? 您可以嘗試檢查一下,看看能給您帶來什么嗎?
為什么你鑄造IEnumerable
,然后鑄造回object
,如果你的temp
變量已經是類型的object
?
IEnumerable<T>
也是一個通用接口,必須指定確切的類型(異常也會告訴您)。 如果您有整數數組,並且要使用它們,則應為IEnumerable<int>
感謝您的所有幫助和反饋。
不幸的是,我對發布的警告似乎未引起足夠的重視。
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,我在下面的解決方案上進行了測試,它似乎可以正常工作。 看來我必須重新安裝軟件包才能在我要使用的VM上運行。
我正在使用的軟件包是一個自定義軟件包,該軟件包使用C#構建具有預建類的解決方案,這些預構建類看起來像即插即用模塊。 您可以將塊連接在一起,將圖線從塊的一個輸入/輸出連接到另一個。 然后,您可以在塊內構建C#代碼。 基本上是假人的C#,就像我一樣。
塊示例:
至於代碼,我確實必須進行如下更改,但現在可以使用了。 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());
}
再次感謝您的所有幫助。 現在只需要使用庫參考來解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.