C#如何判断多个非空可空值是否全部相等?
在C#中判断多个可空值的所有非空值是否全部相等的最简方法
核心思路
过滤掉所有null的可空值,检查剩余的非空值是否完全一致(无任何非空值时也视为符合条件)。
最简实现(Linq方式)
方法一:去重后判断数量
通过Distinct()去重,若去重后的元素数量≤1,说明所有非空值都相等,代码简洁直观:
double? a = null; double? b = 2; double? c = 2; var values = new[] { a, b, c }; bool allNonNullEqual = values.Where(v => v.HasValue) .Select(v => v.Value) .Distinct() .Count() <= 1; // 结果为true
方法二:基于第一个非空值校验
找到第一个非空值,校验所有其他非空值都与它相等,性能更优(无需遍历全部元素去重,遇到不相等值直接停止):
double? a = 4.5; double? b = 4.5; double? c = 4.5; var nonNullValues = new[] { a, b, c } .Where(v => v.HasValue) .Select(v => v.Value); bool allNonNullEqual = !nonNullValues.Any() || nonNullValues.All(v => v.Equals(nonNullValues.First())); // 结果为true
测试案例验证
案例1:
double? a = null; double? b = 2; double? c = 3.5;非空值为
2和3.5,去重后数量为2,返回false,符合预期。案例2:
double? a = 2.5; double? b = 2; double? c = 2;非空值为
2.5、2、2,去重后数量为2,返回false,符合预期。案例3:
double? a = null; double? b = 2; double? c = 2;非空值均为
2,去重后数量为1,返回true,符合预期。案例4:
double? a = 4.5; double? b = 4.5; double? c = 4.5;非空值均为
4.5,去重后数量为1,返回true,符合预期。
内容的提问来源于stack exchange,提问作者patsy2k
相关产品推荐
相关产品推荐

