Vamos a empezar con esta sobrecarga de la Lista BinarySearch:Cómo utilizar BinarySearch para la lista <T>
public int BinarySearch(T item, IComparer<T> comparer);
Es bien sabido que la lista debe ser ordenada con el IComparer apropiado antes de usar BinarySearch. Pero luego: para buscar en la lista, deberá proporcionar un elemento T. Esto es bastante inesperado cuando se utiliza para buscar elementos en la lista en función de las propiedades de estos elementos (es decir, utilizando Linq o delegados/predicados). ¡Porque cuando ya tengo mi artículo T no tengo que buscarlo!
Ahora estaba implementando el código C++ en C# y vi que el programador C++ usaba búsquedas binarias de estilo C++ en todas partes en su código de la siguiente manera. Primero hizo un nuevo artículo T y le dio a este artículo T las propiedades que estaba buscando. Luego buscó en la lista con ella, para encontrar el índice de un artículo en la lista con las mismas propiedades. El comparador de C++, por supuesto, se adaptó a estas propiedades.
Esta es una manera bastante diferente de buscar elementos en una lista. BinarySearch hace un artículo dummy T y busca un índice con el que puede recuperar el artículo real T en la lista. Desde el punto de vista de Linq, esto se siente antinatural.
Mis preguntas son:
¿Me dan una descripción correcta de la idea detrás de BinarySearch?
¿Crees que es posible usar una búsqueda de estilo Linq con BinarySearch sin hacer primero un ítem ficticio T?
¿Por qué esto solo funcionaría para T específicas, cualquier documentación sobre eso? – Gerard
No puede (prácticamente) tener un método de creación universal para todas las entidades. Tienes clases con varios parámetros de constructor, ¿cuál elegirías automáticamente? ¿Cómo suministrarías los parámetros automáticamente? Sería fácil para las estructuras y las clases sin parámetros, que puede restringir. En ese sentido es (en mi humilde opinión) mucho más fácil simplemente crear una T ficticia, ya que la T puede ser cualquier cosa. –
Quizás ayude usar la sintaxis genérica 'donde T: Tipo de Bases' y el envoltorio pueden usar los constutores de Basetype? – Gerard