Omnifactotum is the ultimate solution for .NET developers who want to streamline their development process. It provides its own helper and functional classes and interfaces as well as the extension methods for the standard .NET types. Omnifactotum is compatible with the older and newer .NET versions. It's the perfect way to reduce errors and save time, allowing developers to focus on creating quality code.
Factotum is a Latin word literally meaning "do everything", that is, a handyman or Jack-of-all-trades.
| Branch | Status |
|---|---|
master |
|
develop |
- Reflection
Assemblyextension methodsICustomAttributeProviderextension methods (ICustomAttributeProvideris implemented byAssembly,MethodInfo,PropertyInfo,Typeetc.)MethodBaseextension methodsTypeextension methods
- Array (
T[]) and collection (IEnumerable<T>andICollection<T>) extension methods - Arbitrary
Objectgeneric extension methods Boolean?(Nullable<Boolean>) extension methodsCharextension methodsChar?(Nullable<Char>) extension methodsDateTimeextension methodsDateTime?(Nullable<DateTime>) extension methodsDateTimeOffsetextension methodsDateTimeOffset?(Nullable<DateTimeOffset>) extension methodsDelegateextension methodsEnumextension methodsExceptionextension methodsExpression<TDelegate>extension methodsHttpStatusCodeextension methodsIDictionary<TKey, TValue>extension methodsIDisposableextension methodsIEqualityComparer<T>extension methodsImmutableArray<T>extension methodsISet<T>extension methodsKeyValuePair<TKey, TValue>extension methods- Math extension methods for numeric types
ReadOnlySpan<T>extension methodsSecureStringextension methodsSpan<T>extension methodsStopwatchextension methodsStringextension methodsStringBuilderextension methodsTaskextension methodsTask<TResult>extension methodsTimeSpanextension methodsTimeSpan?(Nullable<TimeSpan>) extension methodsUriextension methodsValueTaskextension methodsValueTask<TResult>extension methods- Value tuple extension methods
EnumFactotumFactotum
ByReferenceEqualityComparer<T>CaseInsensitiveStringKey(deprecated in favor ofCaseInsensitiveString)CaseInsensitiveStringColoredConsoleTraceListenerDirectedGraph<T>andDirectedGraphNode<T>EnumFixedSizeDictionary<TKey, TValue>FixedSizeDictionary<TKey, TValue>KeyedComparer<T, TKey>KeyedEqualityComparer<T, TKey>LocalComputerCurrentDateTimeProvider(implementsICurrentDateTimeProvider)ObjectValidatorReadOnlyItemCollection<T>(the read-only wrapper forICollection<T>)ReadOnlySet<T>SemaphoreSlimBasedLockStopwatchElapsedTimeProvider(implementsIElapsedTimeProvider)SyncValueContainer<T>(implementsIValueContainer<T>)TemplatedStringResolver(provides functionality similar to C# interpolated strings)ValueContainer<T>(implementsIValueContainer<T>)ValueRange<T>VirtualTreeNode<T>andVirtualTreeNodeRoot<T>WeakReferenceBasedCache<TKey, TValue>
ICurrentDateTimeProviderIElapsedTimeProviderIValueContainer<T>
Task EventHandlerAsync<>(...)OutFunc<TOutput, out TResult>OutFunc<in T, TOutput, out TResult>OutFunc<in T1, in T2, TOutput, out TResult>OutFunc<in T1, in T2, in T3, TOutput, out TResult>
Due to certain inconsistencies between .NET Standard 2.0, .NET Framework 4.*, and .NET Core 2.x, you may need to apply one or more workarounds as described below when using Omnifactotum with your projects compiled for .NET Standard 2.0 or .NET Core 2.x -or- a mix of .NET Standard 2.0 and/or .NET Core 2.x and/or .NET Framework 4.x:
| Omnifactotum's Class or Method | Workaround |
|---|---|
System.Collections.Generic.KeyValuePair |
Use Omnifactotum.OmnifactotumKeyValuePair. |
OmnifactotumCollectionExtensions.ToHashSet(...) |
Use static method invocation instead of extension method invocation. That is: OmnifactotumCollectionExtensions.ToHashSet(collection) instead of collection.ToHashSet(). |
OmnifactotumDictionaryExtensions.GetValueOrDefault |
Use static method invocation instead of extension method invocation. That is: OmnifactotumDictionaryExtensions.GetValueOrDefault(dictionary) instead of dictionary.GetValueOrDefault(). |