吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 151|回复: 5
收起左侧

[其他求助] 求助关于C#的Array.IndexOf方法的问题

[复制链接]
烟99 发表于 2024-10-25 19:28
150吾爱币
我想在某个byte数组中查找字节成员0x02首次出现的索引值
[C#] 纯文本查看 复制代码
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);

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
烟99 + 1 + 1 你俩答案都对,但是悬赏只能给一个人,本着先到先得的原则,我只能给你评分 ...

查看全部评分

黄薛海 发表于 2024-10-25 20:23
AI生成的
[C#] 纯文本查看 复制代码
   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 21:05
 楼主| 烟99 发表于 2024-10-25 21:05
黄薛海 发表于 2024-10-25 20:23
AI生成的
[mw_shl_code=csharp,true]   using System;
   using System.Linq;

你这个太复杂
黄薛海 发表于 2024-10-25 21:17

全部问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。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表