Closed as not planned
Description
Background and motivation
Now that we have params ReadOnlySpan<T>
, is it worth revisiting #47456 for variadic versions of Math.Min
and Math.Max
?
If you want to get the max value from multiple variables, you usually end up with some unwieldy code, like
var maxValue = Math.Max(Math.Max(Math.Max(val1, val2), val3), val4);
Otherwise you'd have to allocate an array and use System.Linq.Enumerable.Max
, i.e.
var maxValue = new[] { val1, val2, val3, val4 }.Max();
The implementation would basically be the Span
-path from the Enumerable.Max
implementation:
runtime/src/libraries/System.Linq/src/System/Linq/MaxMin.cs
Lines 35 to 122 in 4420903
These methods could even call the new Math
overloads.
API Proposal
namespace System;
public static class Math
{
public static byte Max(params ReadOnlySpan<byte> values);
public static byte Max(params ReadOnlySpan<decimal> values);
public static byte Max(params ReadOnlySpan<double> values);
public static byte Max(params ReadOnlySpan<short> values);
public static byte Max(params ReadOnlySpan<int> values);
public static byte Max(params ReadOnlySpan<nint> values);
public static byte Max(params ReadOnlySpan<sbyte> values);
public static byte Max(params ReadOnlySpan<float> values);
public static byte Max(params ReadOnlySpan<ushort> values);
public static byte Max(params ReadOnlySpan<uint> values);
public static byte Max(params ReadOnlySpan<ulong> values);
public static byte Max(params ReadOnlySpan<nuint> values);
public static byte Min(params ReadOnlySpan<byte> values);
public static byte Min(params ReadOnlySpan<decimal> values);
public static byte Min(params ReadOnlySpan<double> values);
public static byte Min(params ReadOnlySpan<short> values);
public static byte Min(params ReadOnlySpan<int> values);
public static byte Min(params ReadOnlySpan<nint> values);
public static byte Min(params ReadOnlySpan<sbyte> values);
public static byte Min(params ReadOnlySpan<float> values);
public static byte Min(params ReadOnlySpan<ushort> values);
public static byte Min(params ReadOnlySpan<uint> values);
public static byte Min(params ReadOnlySpan<ulong> values);
public static byte Min(params ReadOnlySpan<nuint> values);
}
API Usage
var maxValue = Math.Max(val1, val2, val3, val4);
Alternative Designs
No response
Risks
No response