2014-05-14 23 views
15

Mi chiedo se ci sia un'interfaccia readonly set-like che dichiari un metodo Contains in C#. Non voglio solo implementare l'interfaccia ISet perché ha troppi metodi non necessari.Esiste un'interfaccia simile a ISet?

mia implementazione idea sarebbe come Thi:

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"); 
    } 
} 

posso definire il mio IReadOnlySet, ma vuole garantire non c'è è built-in uno prima di me.

+1

Vuoi dire [ReadOnlyCollection ] (http://msdn.microsoft.com/en-us/library/ms132474 (v = vs.110) aspx) o la parola chiave [readonly] (http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx) – Liam

+0

Mi sembra che stiate provando a convalidare i vostri dati. Perché stai usando questo approccio per convalidare i tuoi valori di dati? – Flater

+2

La parola chiave readonly è praticamente inutile qui non è vero? – Charleh

risposta

3

No, non c'è l'interfaccia IReadOnlySet<T> in C#. In base alle esigenze che hai descritto, penso che dovresti creare la tua interfaccia IContains<T>.

public interface IContains<T> 
{ 
    bool Contains(T item); 
} 

Nota che questo non può essere aggiunto a collezioni esistenti come List<T> o HashSet<T>, e non contiene altre operazioni di set-like come Count o enumerazione. Potresti utilizzarlo come:

public void TestContains<T>(IContains<T> container, T item) 
{ 
    if (container.Contains(item)) 
    { 
     //something 
    } 
    else 
    { 
     //something else 
    } 
} 
1

Si trova nello spazio dei nomi Microsoft.SqlServer.Management.Sdk. Vedi:

https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.sdk.sfc.ireadonlyset.aspx

Non so il motivo per cui è lì, invece che con il resto dei IReadOnlyYadaYada <> interfacce in .NET per sé. Probabilmente qualche snafu. E probabilmente, la paura della collisione è la ragione per cui non l'hanno inserita in .NET. È un peccato.

Inoltre, questa domanda: Why does List implement IReadOnlyList in .NET 4.5?

+0

In ritardo ma la soluzione è ora disponibile. È un pacchetto nuget chiamato System.Collections.Immutable –

Problemi correlati