繁体   English   中英

在C#中将Object转换为Ushort数组

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM