2014-05-14 13 views
15

Ich frage mich, ob es eine set-lese-Schnittstelle gibt, die eine Contains Methode in C# deklariert. Ich möchte nicht nur die ISet Schnittstelle implementieren, weil es zu viele unnötige Methoden hat.Gibt es eine schreibgeschützte ISet-ähnliche Schnittstelle?

Meine Idee Umsetzung wie thi wäre:

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

ich IReadOnlySet meine eigene definieren kann, aber es sicherstellen wollen, ist keine integrierte in einer bevor ich das tue.

+1

Wollen Sie damit sagen [Readonlycollection ] (http://msdn.microsoft.com/en-us/library/ms132474 (v = vs.110) .aspx) oder das [readonly] (http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx) Schlüsselwort – Liam

+0

Es scheint mir, dass Sie versuchen, Ihre Daten zu überprüfen. Warum verwenden Sie diesen Ansatz, um Ihre Datenwerte zu validieren? – Flater

+2

Das readonly-Schlüsselwort ist hier irgendwie nutzlos, nicht wahr? – Charleh

Antwort

3

Nein, in C# gibt es keine IReadOnlySet<T> Schnittstelle. Basierend auf den Anforderungen, die Sie beschrieben haben, sollten Sie Ihre eigene IContains<T> Schnittstelle erstellen.

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

Beachten Sie, dass dies nicht auf bestehende Sammlungen wie List<T> oder HashSet<T> hinzugefügt werden und enthält keine anderen Set-ähnliche Operationen wie Count oder Aufzählung. Vielleicht haben Sie es mögen verwenden:

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

Es ist im Microsoft.SqlServer.Management.Sdk Namespace ist. Siehe:

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

Ich weiß nicht, warum es da ist, statt mit dem Rest des IReadOnlyYadaYada <> Schnittstellen in .NET selbst. Wahrscheinlich ein paar Snafu. Und wahrscheinlich ist die Angst vor einer Kollision der Grund dafür, dass sie es nicht in .NET selbst eingefügt haben. Was ist eine Schande.

Auch hierzu finden Sie diese Frage: Why does List implement IReadOnlyList in .NET 4.5?

+0

Spät, aber Lösung ist jetzt verfügbar. Es ist ein nugget-Paket namens System.Collections.Immutable –

Verwandte Themen