Throw in the towel.
Update target to .NET 5 (from .NET Core 3.1)
Enabled Nullable Reference Types (still a work in progress though)
New Features:
IsOrdered
FilterOrdered
SortCycle
SortPancake
(Span<T> overload only)
SortStooge
(Span<T> overload only)
TryParseRomanNumeral
Maximum
(Span<T> overload)
Minimum
(Span<T> overload)
Range
(Span<T> overload)
New Features:
IsPalindrome
IsInterleaved
(Recursive + Iterative) [ReadOnlySpanSpan<T>]Fixes:
TagAttribute
supports null
nowChanges:
TryParse
signatures have been changed from [bool TryParse<T>(string @string, out T value)]
to [(bool Success, T Value) TryParse<T>(string @string)]
to help promote structural vs nominal typing. The out parameters require custom delegates while returning a (bool, success)
fits into the standard Func<string, (bool, T)>
pattern.ValueAttribute
renamed to TagAttribute
ReadOnlySpan<T>
overload)Span<T>
overload)Span<T>
overloads)There were some major design changes to push for structural typing rather than nominal typing.
IAction<...>
or IFunc<...>
types.
IGetIndex<T>
-> IFunc<int, T>
ISetIndex<T>
-> IAction<int, T>
ICompare<T>
-> IFunc<T, T, CompareResult>
IEquate<T>
-> IFunc<T, T, bool>
ISift<T>
-> IFunc<T, CompareResult>
IHash<T>
-> IFunc<T, int>
IStep<T>
-> IAction<T>
IStepBreak<T>
-> IFunc<T, StepStatus>
Action<...>
or Func<...>
types.
Equate<T>
-> Func<T, T, bool>
Equate<A, B>
-> Func<A, B, bool>
Compare<T>
-> Func<T, T, CompareResult>
Compare<A, B>
-> Func<A, B, CompareResult>
Sift<T>
-> Func<T, CompareResult>
GetIndex<T>
-> Func<int, T>
SetIndex<T>
-> Action<int, T>
TryParse<T>
-> FuncO1<string, T, bool>
ActionRuntime<...>
or FuncRuntime<...>
types.
SiftRuntime<T>
-> FuncRuntime<T, CompareResult>
CompareRuntime<T>
-> FuncRuntime<T, T, CompareResult>
PredicateRuntime<T>
-> FuncRuntime<T, bool>
GetIndexRuntime<T>
-> FuncRuntime<int, T>
SetIndexRuntime<T>
-> ActionRuntime<int, T>
HashRuntime<T>
-> FuncRuntime<T, int>
There were also some changes to method overloads to promote using Span<T>
and ReadOnlySpan<T>
.