2024-04-22 14:17:08 +01:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2024-04-22 14:18:41 +01:00
|
|
|
using System.Diagnostics.CodeAnalysis;
|
2024-04-22 14:17:08 +01:00
|
|
|
using System.Linq;
|
2024-04-22 14:18:41 +01:00
|
|
|
using System.Runtime.CompilerServices;
|
2024-04-22 14:17:08 +01:00
|
|
|
|
2024-12-19 00:32:23 +10:00
|
|
|
namespace SharpCompress.Helpers;
|
2024-04-22 14:17:08 +01:00
|
|
|
|
2025-01-15 04:46:22 +03:00
|
|
|
internal static class NotNullExtensions
|
2024-04-22 14:17:08 +01:00
|
|
|
{
|
2024-04-23 15:08:32 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static IEnumerable<T> Empty<T>(this IEnumerable<T>? source) =>
|
|
|
|
|
source ?? Enumerable.Empty<T>();
|
2024-04-23 15:08:50 +01:00
|
|
|
|
2024-04-23 15:08:32 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static IEnumerable<T> Empty<T>(this T? source)
|
|
|
|
|
{
|
|
|
|
|
if (source is null)
|
|
|
|
|
{
|
|
|
|
|
return Enumerable.Empty<T>();
|
|
|
|
|
}
|
|
|
|
|
return source.AsEnumerable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if NETFRAMEWORK || NETSTANDARD
|
2024-04-23 15:08:50 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static T NotNull<T>(this T? obj, string? message = null)
|
|
|
|
|
where T : class
|
|
|
|
|
{
|
|
|
|
|
if (obj is null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(message ?? "Value is null");
|
|
|
|
|
}
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-23 15:08:50 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static T NotNull<T>(this T? obj, string? message = null)
|
|
|
|
|
where T : struct
|
|
|
|
|
{
|
|
|
|
|
if (obj is null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentNullException(message ?? "Value is null");
|
|
|
|
|
}
|
|
|
|
|
return obj.Value;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
|
2024-04-23 15:08:32 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static T NotNull<T>(
|
|
|
|
|
[NotNull] this T? obj,
|
|
|
|
|
[CallerArgumentExpression(nameof(obj))] string? paramName = null
|
|
|
|
|
)
|
|
|
|
|
where T : class
|
|
|
|
|
{
|
|
|
|
|
ArgumentNullException.ThrowIfNull(obj, paramName);
|
|
|
|
|
return obj;
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-23 15:08:32 +01:00
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
2024-04-22 14:17:08 +01:00
|
|
|
public static T NotNull<T>(
|
|
|
|
|
[NotNull] this T? obj,
|
|
|
|
|
[CallerArgumentExpression(nameof(obj))] string? paramName = null
|
|
|
|
|
)
|
|
|
|
|
where T : struct
|
|
|
|
|
{
|
|
|
|
|
ArgumentNullException.ThrowIfNull(obj, paramName);
|
|
|
|
|
return obj.Value;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}
|