public OperationResult(string errorMessage, EOperationResultLevel level) { Guard.IsNotNullOrWhiteSpace(errorMessage, nameof(errorMessage)); GuardEx.IsValid(level, nameof(level)); Level = level; ExceptionMessage = errorMessage; }
public OperationRefResult(Exception e, EOperationResultLevel level) { Guard.IsNotNull(e, nameof(e)); GuardEx.IsValid(level, nameof(level)); Level = level; Exception = e; ExceptionMessage = e.Message; }
/// <summary> /// Returns whether <paramref name="element"/> is between <paramref name="lowerBound"/> and <paramref name="upperBound"/>. /// </summary> /// <typeparam name="T">The type of the values.</typeparam> /// <param name="element">The element to check.</param> /// <param name="lowerBound">The first boundary.</param> /// <param name="upperBound">The second boundary.</param> /// <param name="lowerInclusivity">The lower inclusivity.</param> /// <param name="upperInclusivity">The upper inclusivity.</param> /// <returns><see langword="true"/> if <paramref name="element"/> is between <paramref name="lowerBound"/> and <paramref name="upperBound"/>, /// <see langword="false"/> otherwise.</returns> /// <exception cref="InvalidOperationException">Thrown if <paramref name="lowerBound"/> equals <paramref name="upperBound"/> when <paramref name="lowerInclusivity"/> does not equal <paramref name="upperInclusivity"/>.</exception> /// <exception cref="ArgumentNullException"><paramref name="element"/> is <see langword="null"/></exception> /// <exception cref="Exception">A delegate callback throws an exception.</exception> public static bool IsBetween <T>([DisallowNull] this T element, [DisallowNull] T lowerBound, [DisallowNull] T upperBound, EInclusivity lowerInclusivity = EInclusivity.Inclusive, EInclusivity upperInclusivity = EInclusivity.Inclusive) where T : IComparable <T> { if (element is null) { // No Guard - missing class constraint ThrowHelper.ThrowArgumentNullException(nameof(element)); } if (lowerBound is null) { // No Guard - missing class constraint ThrowHelper.ThrowArgumentNullException(nameof(lowerBound)); } if (upperBound is null) { // No Guard - missing class constraint ThrowHelper.ThrowArgumentNullException(nameof(upperBound)); } if (lowerBound.CompareTo(upperBound) > 0) { ThrowArgumentOrderException(); } GuardEx.IsValid(lowerInclusivity, nameof(lowerInclusivity)); GuardEx.IsValid(upperInclusivity, nameof(upperInclusivity)); switch (lowerInclusivity) { case EInclusivity.Exclusive when upperInclusivity == EInclusivity.Exclusive: return(element.CompareTo(lowerBound) > 0 && element.CompareTo(upperBound) < 0); case EInclusivity.Inclusive when upperInclusivity == EInclusivity.Exclusive: if (lowerBound.CompareTo(upperBound) == 0) { throw new InvalidOperationException($"{nameof(lowerBound)} cannot equal {nameof(upperBound)} when {nameof(lowerInclusivity)} does not equal {nameof(upperInclusivity)}."); } return(element.CompareTo(lowerBound) >= 0 && element.CompareTo(upperBound) < 0); case EInclusivity.Exclusive when upperInclusivity == EInclusivity.Inclusive: if (lowerBound.CompareTo(upperBound) == 0) { throw new InvalidOperationException($"{nameof(lowerBound)} cannot equal {nameof(upperBound)} when {nameof(lowerInclusivity)} does not equal {nameof(upperInclusivity)}."); } return(element.CompareTo(lowerBound) > 0 && element.CompareTo(upperBound) <= 0); case EInclusivity.Inclusive when upperInclusivity == EInclusivity.Inclusive: default: return(element.CompareTo(lowerBound) >= 0 && element.CompareTo(upperBound) <= 0); } }
/// <summary> /// Returns whether this <see cref="VersionRange"/> contains the specified <see cref="Version"/>. /// </summary> /// <param name="version">The version to check is in the range of this <see cref="VersionRange"/>.</param> /// <param name="lowerInclusivity">The lower inclusivity.</param> /// <param name="upperInclusivity">The upper inclusivity.</param> public bool Contains(Version version, EInclusivity lowerInclusivity = EInclusivity.Inclusive, EInclusivity upperInclusivity = EInclusivity.Inclusive) { Guard.IsNotNull(version, nameof(version)); GuardEx.IsValid(lowerInclusivity, nameof(lowerInclusivity)); GuardEx.IsValid(upperInclusivity, nameof(upperInclusivity)); return(lowerInclusivity switch { EInclusivity.Exclusive when upperInclusivity == EInclusivity.Exclusive => Minimum < version && version < Maximum, EInclusivity.Exclusive when upperInclusivity == EInclusivity.Inclusive => Minimum < version && version <= Maximum, EInclusivity.Inclusive when upperInclusivity == EInclusivity.Exclusive => Minimum <= version && version < Maximum, _ => Minimum <= version && version <= Maximum });
public static Exception?GetInnerExceptionOfType(this Exception?e, Type type, bool strictType = true) { Guard.IsNotNull(type, nameof(type)); GuardEx.IsTypeOf <Exception>(type, nameof(type)); if (e is null) { return(null); } foreach (var ex in GetInnerExceptions(e)) { if (strictType ? ex.GetType() == type : ex.GetType().IsTypeOf(type)) { return(ex); } } return(null); }
/// <summary> /// Compresses the contents of <paramref name="file"/> into the archive. /// </summary> /// <param name="archive">The archive.</param> /// <param name="file">The file to compress.</param> /// <param name="destination">The destination in the archive.</param> /// <param name="compressionLevel">The compression level.</param> public static void CompressFile(this ZipArchive archive, string file, string?destination, CompressionLevel compressionLevel) { Guard.IsNotNull(archive, nameof(archive)); Guard.IsNotNullOrWhiteSpace(file, nameof(file)); GuardEx.IsValid(compressionLevel, nameof(compressionLevel)); string desiredFileName = !string.IsNullOrWhiteSpace(destination) ? destination ! : Path.GetFileName(file); try { archive.CreateEntryFromFile(file, desiredFileName, compressionLevel); } catch (IOException e) { string tempFile = Path.GetTempFileName(); try { // The file is locked. Try copying to the temp directory, copy from there, // then delete the copy. File.Copy(file, tempFile, true); archive.CreateEntryFromFile(tempFile, desiredFileName, compressionLevel); } catch (Exception) { e.RestoreAndThrow(); } finally { try { File.Delete(tempFile); } catch { // Suppress } } } }