Creación de una lista simple (UniqueList) de elementos con una propiedad Name que solo debe contener elementos únicos (definidos como que tienen diferentes nombres). La restricción del tipo UniqueList puede ser una interfaz:Restricciones sobre los parámetros de tipo: interfaz frente a clase abstracta
interface INamed
{
string Name { get;}
}
o una clase abstracta:
public abstract class NamedItem
{
public abstract string Name { get; }
}
Así que la UniqueList puede ser:
class UniqueList<T> : List<T> where T : INamed
o
class UniqueList<T> : List<T> where T : NamedItem
La función de clase, AddUni Que:
public T AddUnique(T item)
{
T result = Find(x => x.Name == item.Name);
if (result == default(T))
{
Add(item);
return item;
}
return result;
}
Si la restricción de tipo de clase se basa en la interfaz, que compilan los resultados en
Error: Operator '==' cannot be applied to operands of type 'T' and 'T'
en la línea de
if (result == default(T))
Todo está bien si me baso UniqueList en el resumen clase. ¿Alguna idea?
¿Por qué no utilizar un '' HashSet para esto? Hace exactamente lo que quiere –
BrokenGlass
Si T es un tipo de valor, ¿Buscará devolver 'predeterminado (T)' cuando no se encuentre nada? Esto significaría que 'default (T)' no está permitido como un valor, que puede no ser su intención. –
@BrokenGlass Pero no está creando un conjunto de cadenas, está creando un conjunto de cosas con nombre. Realmente quiere un 'HashSet' con un 'IEqualityComparer ' –
phoog