为何C#中用==判断数组等于特定值的条件未生效无输出
问题原因分析
你的代码没有输出的核心原因是C#中引用类型的默认比较规则:
- 数组属于引用类型,默认使用
==比较时,判断的是两个变量指向的内存堆地址是否相同,不会对比数组的长度、内容等实际数据 - 两次
new string[0]都会在堆内存中创建全新的空数组对象,对应两个完全不同的内存地址,因此==判断结果为false,不会进入if分支执行输出逻辑
可行的修复方案
方案1:直接判断数组长度(最推荐,性能最高)
如果仅需要判断数组是否为空,直接读取数组的Length属性即可:
string[] hobbies = new string[0]; if (hobbies.Length == 0) { Console.WriteLine("no hobbies"); }
方案2:使用SequenceEqual对比数组内容
如果需要通用对比两个数组的所有元素是否一致,可以使用System.Linq提供的SequenceEqual方法:
using System.Linq; string[] hobbies = new string[0]; if (hobbies.SequenceEqual(new string[0])) { Console.WriteLine("no hobbies"); }
方案3:使用Array.Empty复用空数组实例
Array.Empty返回的是对应类型的全局单例空数组,所有同类型的Array.Empty调用指向同一个内存地址,因此可以直接用==比较:
string[] hobbies = Array.Empty<string>(); if (hobbies == Array.Empty<string>()) { Console.WriteLine("no hobbies"); }
内容的提问来源于stack exchange,提问作者hmm_interesting
相关产品推荐
相关产品推荐

