猿问

如何在c#中检查列表中的特定项目

目前,我正在开发一个由 200 个传感器节点组成的网络模拟器。在我的代码中,我需要每个节点向其邻居发送 hello 数据包。在上一步中,我编写了一段代码,将 hello 消息从特定节点广播到其邻居(它们是传感器节点)。现在,我需要这些传感器节点将其队列中的 hello 数据包重新转发给其邻居。我需要检查传感器节点的队列是否已经有一个 hello 数据包,以便将其重新转发到该传感器节点的邻居。。。


例如,我创建了这样的 hello :


 Packet hello = new Packet(CNs[i].cnID, i, i, 0, CNs[i].cnDepth, DateTime.Now, "Hello, I am a Courier node near of you");

数据包声明如下:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace AUV_Topology

{

    class Packet    

    {    

        public int senderID;

        public int nextID;

        public int recieverID;

        public int packetSequenceNum;

        public int depth;

        public DateTime sendingTime;

        public String data;


        public Packet(int sID, int nID, int rID, int pSecNum, int depth,DateTime sTime, String data)    

        {    

            this.senderID = sID;

            this.nextID = nID;

            this.recieverID = rID;

            this.packetSequenceNum = pSecNum;

            this.depth = depth;

            this.sendingTime = sTime;

            this.data = data;   

        }    

    }

}

为了确保传感器节点队列有从另一个节点收到的 hello 数据包,我使用“foreach”并检查列表中的每个数据包是否包含“Hello,我是您附近的 Courier 节点”...


不幸的是,我尝试使用


SNs[i]queue.contains("Hello, I am a Courier node near of you");

其中SN[i]是传感器节点数组,队列是声明如下的属性:


public List<Packet> queue = new List<Packet>();

但我收到语法错误:


参数 1:无法从“string”转换为“AUV_Topology.Packet”AUVs_TOPOLOGY


我怎样才能做到这一点?


这是一个可能的解决方案吗:


 for(int j=0; j < NodeNum; j++)

 {   

   if (SNsNighbors[i, j] == 1)

      {

         String temp = SNs[i].queue.ToString();

         if (temp.Contains("Hello"))

         {

         }    

      }    

  }


慕村225694
浏览 69回答 1
1回答

慕姐4208626

如果queue是数据包列表,并且您想知道这些数据包中是否有一个data是 hello 消息,请确保您已导入 LINQ 并执行以下操作:SNs[i].queue.Any(pkt&nbsp;=>&nbsp;pkt.data&nbsp;==&nbsp;"Hello,&nbsp;I&nbsp;am&nbsp;a&nbsp;Courier&nbsp;node&nbsp;near&nbsp;of&nbsp;you");如果任何数据包具有该数据,则返回 bool true。如果要检索包含此数据的第一个数据包,请将 Any 替换为 First。如果多个数据包都有它并且您希望所有数据包都将其交换为Where附:在 C# 中,我们以首字母大写字母命名公共成员,例如 Data、Queue 等,并且我们更喜欢公共属性而不是公共变量。此外,如果使用 FIFO 队列来建模队列更合适,则 System.Collections.Generic 命名空间与 List 一起具有其中之一
随时随地看视频慕课网APP
我要回答