目前,我正在开发一个由 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")) { } } }
1 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
如果queue
是数据包列表,并且您想知道这些数据包中是否有一个data
是 hello 消息,请确保您已导入 LINQ 并执行以下操作:
SNs[i].queue.Any(pkt => pkt.data == "Hello, I am a Courier node near of you");
如果任何数据包具有该数据,则返回 bool true。如果要检索包含此数据的第一个数据包,请将 Any 替换为 First。如果多个数据包都有它并且您希望所有数据包都将其交换为Where
附:在 C# 中,我们以首字母大写字母命名公共成员,例如 Data、Queue 等,并且我们更喜欢公共属性而不是公共变量。此外,如果使用 FIFO 队列来建模队列更合适,则 System.Collections.Generic 命名空间与 List 一起具有其中之一
- 1 回答
- 0 关注
- 61 浏览
添加回答
举报
0/150
提交
取消