public static int?GetIndexBinarySearch <T>( IList <T> array, BinarySearchComparison <T> comparison, int?default_value) where T : struct { int min = 0; int max = array.Count - 1; while (true) { int middle = (max - min) / 2 + min; int result = comparison(array[middle]); if (result == 0) { return(middle); } else if (result < 0) { min = middle + 1; } else { max = middle - 1; } if ((max < min) || (min > max) || (min < 0) || (max >= array.Count)) { return(default_value); } } }
public static int?GetIndexBinarySearch <T>( IList <T> array, BinarySearchComparison <T> comparison) where T : struct { return(GetIndexBinarySearch <T>(array, comparison, null)); }