求助关于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,求大佬解答这是为什么 显式地将 0x02 转换为 byte 类型
int index = Array.IndexOf(mybytes, (byte)0x02); 本帖最后由 skypaladin 于 2024-10-25 20:14 编辑
类型不匹配
int index = Array.IndexOf(mybytes, 0x02);
改为
int index = Array.IndexOf(mybytes, (byte)0x02); 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。
黄薛海 发表于 2024-10-25 20:23
AI生成的
using System;
using System.Linq;
你这个太复杂 烟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]