我发现的Microsoft文档没有清楚地回答我的问题,因为它没有明确指出
它们是否包含在内?被移除了吗?还是会触发错误?
在我的搜索和测试中,似乎重复项被静默地剥离。StackOverflow上的其他问题假定应该剥离重复项。
只要正确覆盖
我是正确的还是错过了什么?假设会导致错误。 一个简单的回答,带有文档链接的Yes就足够了。
引发此问题的两个原因是:
1. ToDictionary的文档特别指出重复项会引发错误。
2. 看到调用
ToHashSet()
会如何处理重复项。它们是否包含在内?被移除了吗?还是会触发错误?
在我的搜索和测试中,似乎重复项被静默地剥离。StackOverflow上的其他问题假定应该剥离重复项。
只要正确覆盖
.Equals()
和.GetHashCode()
,这对于所有对象都是正确的。我是正确的还是错过了什么?假设会导致错误。 一个简单的回答,带有文档链接的Yes就足够了。
引发此问题的两个原因是:
1. ToDictionary的文档特别指出重复项会引发错误。
.ToHashSet()
的文档没有关于重复项的说明。2. 看到调用
.ToHashSet()
之前进行.Distinct()
或.GroupBy()
的代码。这意味着开发人员要么不理解.ToHashSet()
,要么害怕创建错误。
new[] { 1, 1, 2 }.ToHashSet()
的结果是HashSet<int>(Count = 2) { 1, 2 }
。 - Pasi SavolainenStackOverflowException
或ThreadAbortException
,尽管每个方法理论上都可能引发这些异常。文档经常遗漏深层调用中的异常,也忽略了DivideByZeroException
。由于文档可能不完整,并且没有明确排除ToHashSet()
可能会在调用Add()
后返回false
并抛出异常的情况(这是一个有效的第三种实现方式),所以提问者对预期行为的询问是正确的。" - Sean Werkema