Dado el siguiente ejemplo sencillo:
List<string> list = new List<string>() { "One", "Two", "Three", "three", "Four", "Five" };
CaseInsensitiveComparer ignoreCaseComparer = new CaseInsensitiveComparer();
var distinctList = list.Distinct(ignoreCaseComparer as IEqualityComparer<string>).ToList();
Parece que el CaseInsensitiveComparer no está siendo utilizado para hacer una mayúsculas y minúsculas comparación.
En otras palabras distinctList contiene el mismo número de elementos que lista. En lugar de eso me sería de esperar, por ejemplo, «Tres» y «tres» se consideran iguales.
Que me estoy perdiendo algo o esto es un problema con el operador Distinct?
StringComparer
hace lo que usted necesita:(o invariante /ordinal /etc dependiendo de los datos que se comparan)
[Marc Gravells respuesta si desea que el más conciso de enfoque]
Después de algunas investigaciones y buenos comentarios de Bradley Grainger he implementado las siguientes IEqualityComparer. Es suports un insensible a mayúsculas-minúsculas Distintas() instrucción (acaba de pasar una instancia de este para el operador Distinct) :
Aquí es una versión más simple.
De salida será