/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Scripting/Core/Utilities/ParameterValidationHelpers.cs
84 строки
3 KB
Jared Parsons
generated move
28 сен 2020, 19:36
28 сен 2020, 19:36
1cca63b
Код
Авторство
О чём код?
// 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. #nullable disable using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using Microsoft.CodeAnalysis.PooledObjects; namespace Microsoft.CodeAnalysis.Scripting { internal static class ParameterValidationHelpers { internal static ImmutableArray<T> CheckImmutableArray<T>(ImmutableArray<T> items, string parameterName) { if (items.IsDefault) { throw new ArgumentNullException(parameterName); } for (int i = 0; i < items.Length; i++) { if (items[i] == null) { throw new ArgumentNullException($"{parameterName}[{i}]"); } } return items; } internal static ImmutableArray<T> ToImmutableArrayChecked<T>(IEnumerable<T> items, string parameterName) where T : class { var builder = ArrayBuilder<T>.GetInstance(); AddRangeChecked(builder, items, parameterName); return builder.ToImmutableAndFree(); } internal static ImmutableArray<T> ConcatChecked<T>(ImmutableArray<T> existing, IEnumerable<T> items, string parameterName) where T : class { var builder = ArrayBuilder<T>.GetInstance(); builder.AddRange(existing); AddRangeChecked(builder, items, parameterName); return builder.ToImmutableAndFree(); } internal static void AddRangeChecked<T>(ArrayBuilder<T> builder, IEnumerable<T> items, string parameterName) where T : class { RequireNonNull(items, parameterName); foreach (var item in items) { if (item == null) { throw new ArgumentNullException($"{parameterName}[{builder.Count}]"); } builder.Add(item); } } internal static IEnumerable<S> SelectChecked<T, S>(IEnumerable<T> items, string parameterName, Func<T, S> selector) where T : class where S : class { RequireNonNull(items, parameterName); return items.Select(item => (item != null) ? selector(item) : null); } internal static void RequireNonNull<T>(IEnumerable<T> items, string parameterName) { if (items == null || items is ImmutableArray<T> && ((ImmutableArray<T>)items).IsDefault) { throw new ArgumentNullException(parameterName); } } } }