gpt4 book ai didi

c# - SingleOrDefault() 当序列包含默认值时

转载 作者:太空狗 更新时间:2023-10-29 21:21:51 24 4
gpt4 key购买 nike

我偶然发现了一个有趣的场景,但我找不到解决方案。假设我必须找到序列中的主数(至少出现 n/2 + 1 次的数字,其中 n 是序列的大小)。这是我的实现:

public static int FindMajorant(IList<int> numbers)
{
return numbers
.GroupBy(x => x)
.Where(g => g.Count() >= numbers.Count / 2 + 1)
.Select(g => g.Key)
.SingleOrDefault();
}

我正在使用 SingleOrDefault(),如果在序列中找到该元素或该类型的默认值,它将返回该元素:在这种情况下,它将返回 0 因为它是 int 的默认值。例如,我的方法为以下序列返回 3:

List<int> sampleNumbers = new List<int>() { 2, 2, 3, 3, 2, 3, 4, 3, 3 };

这是预期的行为。

但是,如果序列中的主数为零 (0) 会怎样?它会返回 0,但那样的话,我如何确定它是 SingleOrDefault() 中的零作为默认值,还是主要值?或许,我可以使用 Single(),但这会抛出一个非常不正确的异常。我也可以捕捉到这个异常,但这对我来说似乎是一种不好的做法。所以我的问题是,处理这种情况的首选方法是什么?

最佳答案

使用可空值,其中 null 表示没有专业,而不是使用“0”来表示。很方便的是,int? 的默认值为 null,因此您的代码唯一需要更改的是在调用 SingleOrDefault< 之前获取一系列可为 null 的整数.

public static int? FindMajorant(IList<int> numbers)
{
return numbers
.GroupBy(x => x)
.Where(g => g.Count() >= numbers.Count / 2 + 1)
.Select(g => (int?)g.Key)
.SingleOrDefault();
}

关于c# - SingleOrDefault() 当序列包含默认值时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com