Hos*_*Rad 5 c# generics icomparable nan
我有一个通用GetMinimum方法。它接受 IComparable 类型的数组(因此它可能是string[]or double[])。在这种情况下double[],我如何实现此方法来忽略这些double.NaN值?(我正在寻找好的做法)
当我传递这个数组时
double[] inputArray = { double.NaN, double.NegativeInfinity, -2.3, 3 };
Run Code Online (Sandbox Code Playgroud)
它返回 double.NaN!
public T GetMinimum<T>(T[] array) where T : IComparable<T>
{
T result = array[0];
foreach (T item in array)
{
if (result.CompareTo(item) > 0)
{
result = item;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
由于NaN < x和始终为假,因此根本没有定义要求可以包含NaN > x的集合的最小值。这就像除以零:没有有效的答案。NaN
因此,合乎逻辑的方法是预先过滤这些值。这不会是通用的,但应该没问题。
var results = inputArray.EliminateNaN().GetMinimum();
Run Code Online (Sandbox Code Playgroud)
关注点分离:过滤不应该是 的责任(和负担)GetMinimum()。