| File: Collections\HashSetExtensions.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace Microsoft.CodeAnalysis { internal static class HashSetExtensions { internal static bool IsNullOrEmpty<T>([NotNullWhen(returnValue: false)] this HashSet<T>? hashSet) { return hashSet == null || hashSet.Count == 0; } internal static bool InitializeAndAdd<T>([NotNullIfNotNull(parameterName: nameof(item)), NotNullWhen(returnValue: true)] ref HashSet<T>? hashSet, [NotNullWhen(returnValue: true)] T? item) where T : class { if (item is null) { return false; } else if (hashSet is null) { hashSet = new HashSet<T>(); } return hashSet.Add(item); } /// <summary> /// This extension method is added so that it's preferred over LINQ's Any. /// This is more efficient than LINQ, especially in that it avoids the enumerator boxing allocation. /// </summary> internal static bool Any<T>(this HashSet<T> hashSet, Func<T, bool> predicate) { foreach (var item in hashSet) { if (predicate(item)) { return true; } } return false; } } }