在C#

时间:2016-01-05 15:00:56

标签: c# arrays linq

我对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函数不正确,因为它最初设计用于将对象转换为字符串数组。

任何帮助都会很棒。

谢谢

3 个答案:

答案 0 :(得分:0)

IEnumerable是一个通用接口,所以你必须声明你正在使用的数据类型......

说实话,我想查看对

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

实际上正在返回 - 通过在调试器中检查它...如果它只是返回对数字类型数组的引用,你应该能够简单地转换它。你正在做的是尝试在数组中强制转换每个单独的项目 - 我怀疑这不是你应该做的 - 这将是自己投射数组。

您能否在Agent对象上为Port方法提供任何API文档,以便我可以看到它返回的意义?你可以尝试检查,看看它给你带来了什么吗?

答案 1 :(得分:0)

如果您的IEnumerable变量已经是object类型,那么为什么要转换为temp,然后再将其转发回object

IEnumerable<T>也是一个通用接口,必须指定确切的类型(例外情况也是如此)。如果你有一个整数数组,并且你想使用它们,它应该是IEnumerable<int>

答案 2 :(得分:0)

感谢所有的帮助和反馈。

不幸的是,我没有足够重视发布的警告,这些警告似乎导致了这个问题。

"type": "mood",
    "terms": [
        { "name": "happy" },
        { "name": "angry" },
        { "name": "sad" },
        { "name": "relaxing" },
        { "name": "excited"  }

似乎.NET引用存在一些问题。我有另一个VM,我测试了以下解决方案,它似乎没有问题。看起来我将不得不重新安装软件包,以使其在我想要使用的VM上工作。

我正在使用的软件包是一个自定义程序包,它使用C#构建解决方案,其中预构建的类看起来像即插即用块。您可以将块从一个块的输入/输出连接到另一个块。然后,您可以在块内部构建C#代码。基本上c#就像我一样虚拟..

块的示例:

Example of the blocks:

至于代码,我确实需要做如下的一些更改,但现在有效。 Agent.Port(“PumpPressure1_01”)。Value.RawValue用于引用块上的特定端口。

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

再次感谢所有的帮助。现在只需要解决库引用的问题。