c# - ruta - openfiledialog visual basic
¿Hay una interfaz tipo ISet de solo lectura? (3)
¿Qué hay de la IImmutableSet<T>
?
Me pregunto si hay alguna interfaz de solo lectura de tipo set que declare un método Contains
en C #. No quiero simplemente implementar la interfaz ISet
porque tiene demasiados métodos innecesarios.
La implementación de mi idea sería como esta:
public class PositiveInt : IReadOnlySet<Int32>
{
public bool Contains(Int32 n){
return n > 0;
}
}
public class CraEmployeeNames:IReadOnlySet<String>
{
public bool Contains(String n){
return !String.IsNullOrWhiteSpace(n) && n.StartsWith("Cra");
}
}
Puedo definir mi propio IReadOnlySet
, pero quiero asegurarme de que no haya uno incorporado antes que yo.
No, no hay una IReadOnlySet<T>
en C #. Según las necesidades que ha descrito, creo que debe crear su propia IContains<T>
.
public interface IContains<T>
{
bool Contains(T item);
}
Tenga en cuenta que esto no se puede agregar a las colecciones existentes como List<T>
o HashSet<T>
, y no contiene otras operaciones similares a conjuntos como Count
o enumeración. Podrías usarlo como:
public void TestContains<T>(IContains<T> container, T item)
{
if (container.Contains(item))
{
//something
}
else
{
//something else
}
}
Se encuentra en el espacio de nombres Microsoft.SqlServer.Management.Sdk. Ver:
https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.sdk.sfc.ireadonlyset.aspx
No sé por qué está ahí, en lugar de con el resto de las interfaces IReadOnlyYadaYada <> en .NET. Probablemente algún error. Y probablemente, el miedo a la colisión es la razón por la que no lo han puesto en .NET. Que es una pena.
Además, vea esta pregunta: ¿Por qué la Lista implementa IReadOnlyList en .NET 4.5?