using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; namespace System; public static class ThrowIf { public static void When(bool isMatch, string msg) { if (isMatch) { throw new ArgumentException(msg); } } public static void IsNull([NotNull] T? value, string? msg = null, [CallerArgumentExpression("value")] string? paraName = null) { if (value == null) { throw string.IsNullOrEmpty(msg) ? new ArgumentNullException(paraName) : new ArgumentException(msg); } } public static void IsNullOrDefault([NotNull] T? value, string? msg = null, [CallerArgumentExpression("value")] string? paraName = null) where T : struct { if (!value.HasValue || value.Value.Equals(default(T))) { throw string.IsNullOrEmpty(msg) ? new ArgumentException("值不可为空或默认值", paraName) : new ArgumentException(msg); } } public static void IsNullOrWhiteSpace([NotNull] string? value, string? msg = null, [CallerArgumentExpression("value")] string? paraName = null) { if (string.IsNullOrWhiteSpace(value)) { throw string.IsNullOrEmpty(msg) ? new ArgumentException("值不可为空或空格", paraName) : new ArgumentException(msg); } } public static void IsNullOrEmpty([NotNull] string? value, string? msg = null, [CallerArgumentExpression("value")] string? paraName = null) { if (string.IsNullOrEmpty(value)) { throw string.IsNullOrEmpty(msg) ? new ArgumentException("值不可为空", paraName) : new ArgumentException(msg); } } //public static ICollection NotNullOrEmpty(ICollection value, string paraName) //{ // if (value.IsNullOrEmpty()) // { // throw new ArgumentException(paraName + " can not be null or empty!", paraName); // } // return value; //} //public static Type AssignableTo(Type type, string paraName) //{ // NotNull(type, paraName); // if (!type.IsAssignableTo()) // { // throw new ArgumentException(paraName + " (type of " + type.AssemblyQualifiedName + ") should be assignable to the " + typeof(TBaseType).GetFullNameWithAssemblyName() + "!"); // } // return type; //} public static void OutOfRange(short value, string paraName, short minimumValue, short maximumValue = short.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } public static void OutOfRange(int value, string paraName, int minimumValue, int maximumValue = int.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } public static void OutOfRange(long value, string paraName, long minimumValue, long maximumValue = long.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } public static void OutOfRange(float value, string paraName, float minimumValue, float maximumValue = float.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } public static void OutOfRange(double value, string paraName, double minimumValue, double maximumValue = double.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } public static void OutOfRange(decimal value, string paraName, decimal minimumValue, decimal maximumValue = decimal.MaxValue) { if (value < minimumValue || value > maximumValue) { throw new ArgumentException($"{paraName} is out of range min: {minimumValue} - max: {maximumValue}"); } } }