[英]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.