如何在 C# 中处理接受 IComparable 的通用方法的 double.NaN

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)

Hen*_*man 6

由于NaN < x和始终为假,因此根本没有定义要求可以包含NaN > x的集合的最小值。这就像除以零:没有有效的答案。NaN

因此,合乎逻辑的方法是预先过滤这些值。这不会是通用的,但应该没问题。

 var results = inputArray.EliminateNaN().GetMinimum();
Run Code Online (Sandbox Code Playgroud)

关注点分离:过滤不应该是 的责任(和负担)GetMinimum()