【问题标题】:How to check a specific item in a list in c#如何在c#中检查列表中的特定项目
【发布时间】:2019-09-29 19:01:49
【问题描述】:

目前,我正在开发一个由 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”并检查列表中的每个数据包是否包含“你好,我是你附近的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"))
         {
         }    
      }    
  }

【问题讨论】:

  • 如果类是public,则编译。
  • SNs[i]queue.Contains(...) - Contains 中的大写字母 C?
  • 请多放些代码,因为你说队列是一个属性,但什么是属性?我不理解数组上下文中的属性。
  • “我遇到了一个错误”——请说出确切的类型和错误消息文本是什么——“猜猜这段代码会抛出什么错误”是一款不错的游戏,但玩起来需要相当长的时间:)
  • @CaiusJard :我添加了错误......

标签: c# arraylist


【解决方案1】:

如果queue 是一个数据包列表,并且您想知道这些数据包中是否有任何一个包含问候消息的data,请确保您已导入 LINQ 并执行以下操作:

SNs[i].queue.Any(pkt => pkt.data == "Hello, I am a Courier node near of you");

如果任何数据包具有该数据,这将返回布尔值 true。如果要检索包含此数据的第一个数据包,请将 Any 替换为 First。如果多个数据包都有它,并且您希望所有数据包都将其交换为 Where

ps;在 C# 中,我们以首字母大写、Data、Queue 等命名公共成员,并且我们更喜欢公共属性而不是公共变量。此外,如果更适合使用 FIFO 队列来为队列建模,System.Collections.Generic 命名空间与 List 一起具有其中之一

【讨论】:

  • 请问如何知道这个pkt的队列中的索引??
  • List 有一个 FindIndex 方法,该方法采用谓词来计算是否应该“找到”特定元素 - 用 Any 代替 FindIndex
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多