C# extension methods for Base Class Library types.
The motivation behind this project is to collect reusable extension methods into a NuGet package avoiding CPD (copy-paste-development).
You can find the complete documentation here.
The documentation is generated by Sandcastle Help File Builder.
You can download the package from nuget.org.
You can find the release notes here.
There are examples below only for some of the methods. Feel free to discover all the methods in the documentation.
- For generic
Ttype:ThrowIfNull<T>()throwsArgumentNullException
- For
System.Stringtype:ThrowIfNullOrEmpty()throwsArgumentNullExceptionorArgumentExceptionThrowIfNullOrWhiteSpace()throwsArgumentNullExceptionorArgumentException
- For
System.Guidtype:ThrowIfEmptyGuid()throwsArgumentException
Would like to use the new static methods in ArgumentOutOfRangeException that were introduced in .NET 8 but still on older target framework?
In this package they are available as extension methods. (examples)
- For
IEquatable<T>type:ThrowIfEqualTo()ThrowIfNotEqualTo()
- For
IComparable<T>type:ThrowIfLessThan()ThrowIfLessThanOrEqualTo()ThrowIfGreaterThanThrowIfGreaterThanOrEqualTo()
- For numeric types:
System.SByte,System.Int16,System.Int32,System.Int64,
System.Byte,System.UInt16,System.UInt32,System.UInt64,
System.Half,System.Single,System.Double,System.DecimalThrowIfZero()ThrowIfNegative()ThrowIfNegativeOrZero()ThrowIfPositive()ThrowIfPositiveOrZero()
The exception messages are in English but they can be configured.
using EgonsoftHU.Extensions.Bcl;
// This method is intended to be used for non-localizable error messages.
ErrorMessageConfiguration.Current.ConfigureErrorMessage(
errorMessageKey: ErrorMessageKey.ArgumentOutOfRange_MustBeNonZero,
errorMessage: "The parameter '{0}' must be non-zero. Actual value: {1}"
);
// This method is intended to be used for localizable error messages.
ErrorMessageConfiguration.Current.ConfigureErrorMessage(
errorMessageKey: ErrorMessageKey.ArgumentOutOfRange_MustBeNonZero,
errorMessageResourceType: typeof(YourCustomValidationResources),
// This parameter is optional. If not specified then the value of errorMessageKey is used.
errorMessageResourceName: "YourCustomResourceName"
);This package contains extension methods for these types:
System.Collections.Generic.ICollection<T>AddRange()
System.Collections.Generic.IDictionary<TKey, TValue>AsReadOnly()AsSorted()DefaultIfKeyNotFound()GetOrThrow()
System.Collections.Generic.IEnumerable<T>IsNullOrEmpty()DetectChanges()- Get new, existing and removed items.
System.Collections.Generic.IList<T>AsReadOnly()up to .NET 6 (An extension method with the same signature is part of .NET 7+.)
System.DateOnlyIsInRange()
System.DateTimeIsInRange()ToMinutePrecision()ToSecondPrecision()
System.DateTimeOffsetIsInRange()ToMinutePrecision()ToSecondPrecision()
System.ExceptionGetHttpStatusCode()SetHttpStatusCode()
System.IO.StreamToByteArray()ToByteArrayAsync()TryResetStreamPosition()
System.Reflection.AssemblySystem.Reflection.MemberInfoSystem.Reflection.ParameterInfoSystem.StringIsNullOrEmpty()IsNullOrWhiteSpace()DefaultIfNullOrEmpty()DefaultIfNullOrWhiteSpace()EnsureTrailingSlash()EnsureNoTrailingSlash()
System.TypeAsNullableValueType()IsNullableValueType()
- Numeric types:
System.SByte,System.Int16,System.Int32,System.Int64,
System.Byte,System.UInt16,System.UInt32,System.UInt64,
System.Half,System.Single,System.Double,System.DecimalIsZero()IsNegative()IsNegativeOrZero()IsPositive()IsPositiveOrZero()IsInRange()
IEnumerable-relatedAsSingleElementSequence()IsIn()IsNotIn()
Reflection-relatedGetPropertyValue()TryPropertyValue()SetPropertyValue()TrySetPropertyValue()
- value selectors
GetStringValueOrNull()GetStringValueOrEmptyString()GetValueOrDefault()GetValue()
CharsDateTimeFormatsGenericTypeDefinitionsGuidFormats(examples)HttpStatusCodesStrings
IntervalBoundsOptions- can be used e.g. in the newIsInRange()extension methods.
EnumInfo<TEnum>- A wrapper class that provides additional information about an
enumtype or value.- The custom attributes applied to a member.
- Easy access to the list of the defined members.
- Easy access to the name or the underlying value of a member.
- Support for customizing the serialized value through attributes.
- Implements bitwise / comparison / implicit conversion / equality operators.
- A wrapper class that provides additional information about an
EncodingProviderUTF8WithoutBOMThe UTF-8 encoding without the Unicode byte order mark.
StringSyntaxAttribute- up to .NET 6 (This attribute is part of .NET 7+.)
StructuralEqualityComparer<T>- Provides a generic
IEqualityComparer<T>instance for using the non-genericSystem.Collections.StructuralComparisons.StructuralEqualityComparer.
- Provides a generic
TypeHelperGetName<T>()/GetName(Type)methods as a shortcut forType.FullName ?? Type.Nameexpression.