烟99 发表于 2024-10-25 19:28

求助关于C#的Array.IndexOf方法的问题

我想在某个byte数组中查找字节成员0x02首次出现的索引值
using System;

class ByteSearch
{
    static void Main()
    {
      byte[] mybytes = new byte[] { 0x00, 0x00, 0x01, 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
      
      // 使用Array.IndexOf查找0x02在数组中的位置
      int index = Array.IndexOf(mybytes, 0x02);
      Console.WriteLine($"0x02 所在位置为: {index}");
    }
}

但是返回的下标值一直就是-1,求大佬解答这是为什么

grekevin 发表于 2024-10-25 19:28

显式地将 0x02 转换为 byte 类型
int index = Array.IndexOf(mybytes, (byte)0x02);

skypaladin 发表于 2024-10-25 20:12

本帖最后由 skypaladin 于 2024-10-25 20:14 编辑

类型不匹配
int index = Array.IndexOf(mybytes, 0x02);
改为
int index = Array.IndexOf(mybytes, (byte)0x02);

黄薛海 发表于 2024-10-25 20:23

AI生成的
   using System;
   using System.Linq;

   class ByteSearchLinq
   {
       static void Main()
       {
         byte[] mybytes = new byte[] { 0x00, 0x00, 0x01, 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
         int targetValue = 0x02;
         var index = mybytes.Select((b, i) => new { ByteValue = b, Index = i })
                           .FirstOrDefault(item => item.ByteValue == targetValue)?.Index?? -1;
         Console.WriteLine($"0x02 所在位置为: {index}");
       }
   }



借助 LINQ 的查询功能,可以更加简洁地实现查找特定字节在数组中的位置。这种方法首先将数组转换为一个包含字节值和索引的匿名类型序列,然后使用FirstOrDefault方法找到第一个满足条件的元素,并获取其索引值。如果没有找到匹配的元素,则返回 -1。

烟99 发表于 2024-10-25 21:05

黄薛海 发表于 2024-10-25 20:23
AI生成的
   using System;
   using System.Linq;


你这个太复杂

黄薛海 发表于 2024-10-25 21:17

烟99 发表于 2024-10-25 21:05
你这个太复杂

全部问AI
能用就行。

以下是对这段 C# 代码的理解:
mybytes.Select((b, i) => new { ByteValue = b, Index = i }):
这里使用了 LINQ 的 Select 方法对 mybytes 集合进行遍历。对于集合中的每个字节 b,同时结合其索引 i,创建一个匿名类型对象,该对象包含两个属性:ByteValue(表示字节值)和 Index(表示在集合中的索引)。
.FirstOrDefault(item => item.ByteValue == targetValue):
接着在生成的匿名类型对象序列上调用 FirstOrDefault 方法。这个方法会遍历序列,查找第一个满足条件的元素,这里的条件是 item.ByteValue == targetValue,即字节值等于目标值 targetValue。如果找到了满足条件的元素,就返回这个元素;如果没有找到,就返回 null。
?.Index?? -1:
这是一个空值合并操作符的链式使用。首先,如果前面的表达式返回的不是 null,则访问其 Index 属性,得到满足条件的字节在原始集合中的索引值。如果前面的表达式返回 null,则使用空值合并操作符 ??,将其结果设置为 -1,表示没有找到目标字节。
总体来说,这段代码的目的是在一个字节集合中查找特定目标字节,并返回目标字节在集合中的索引,如果没有找到则返回 -1。
页: [1]
查看完整版本: 求助关于C#的Array.IndexOf方法的问题