You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#数组元素检查函数异常:匹配元素仍返回false

数组元素检查返回false的问题分析与解决

你的代码核心问题在于**object类型用==比较的是引用相等**,而非值相等:
当你把int这类值类型放入object[]数组时,每个元素都会被自动装箱成独立的object实例。此时用tempVar == x比较的是两个装箱对象的引用地址,而非它们实际存储的数值,所以即使值相同,也会返回false。

修复方案1:改用Equals方法比较值

Equals方法对于值类型已经被重写,会直接比较实际数值,修改后的代码如下:

public class whatever
{
    public bool checkArray(object[] a, object x)
    {
        int index = 0;
        while (index < a.Length)
        {
            object item = a[index];
            // 用Equals比较值相等,同时处理null情况
            if (item != null && item.Equals(x)) 
            {
                return true; // 找到元素后直接返回,无需遍历剩余元素
            }
            index++;
        }
        return false;
    }
}

注:增加item != null判断,避免数组元素为null时调用Equals抛出空引用异常。

修复方案2:使用泛型方法(更推荐)

泛型可以避免值类型装箱的问题,同时保证类型安全,性能也更好:

public class whatever
{
    public bool checkArray<T>(T[] a, T x)
    {
        foreach (var item in a)
        {
            // EqualityComparer<T>.Default会自动处理值类型/引用类型的比较,同时兼容null
            if (EqualityComparer<T>.Default.Equals(item, x))
            {
                return true;
            }
        }
        return false;
    }
}

调用时直接传入int数组即可,无需装箱:

whatever checking = new whatever();
int[] s = { 1,2,3,54,62};
Console.Write(checking.checkArray(s,3));

内容的提问来源于stack exchange,提问作者Magan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:34:56