2014-05-14 25 views
15

C# içinde Contains yöntemini bildiren set benzeri bir salt okunur arabirim olup olmadığını merak ediyorum. Çok fazla gereksiz yönteme sahip olduğu için ISet arayüzünü uygulamak istemiyorum.Sadece ISet benzeri bir arayüz var mı?

Benim fikrim uygulaması Thi gibi olacaktır:

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

Ben IReadOnlySet kendi tanımlamak, ancak hiçbir orada yerleşik olan biri benden önce sağlamak istiyoruz olabilir.

+1

Şunu musunuz [ReadOnlyCollection ] (http://msdn.microsoft.com/en-us/library/ms132474 (v = vs.110) .aspx) veya [readonly] (http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx) anahtar sözcüğü – Liam

+0

Verilerinizi doğrulamaya çalıştığınız görülüyor. Veri değerlerinizi doğrulamak için bu yaklaşımı neden kullanıyorsunuz? – Flater

+2

Salt okunur anahtar kelime burada işe yaramıyor, değil mi? – Charleh

cevap

3

Hayır, C# içinde IReadOnlySet<T> arabirimi yoktur. Tanımladığınız ihtiyaçlara dayanarak, kendi IContains<T> arayüzünüzü oluşturmanız gerektiğini düşünüyorum. Bu List<T> veya HashSet<T> gibi mevcut koleksiyonlarına eklenemez ve Count Numaralama gibi başka set gibi işlemleri içermediğini

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

Not. Bunu kullanabilirsiniz:

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

Microsoft.SqlServer.Management.Sdk ad alanında. Bkz:

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

neden orada olduğunu ben yerine .NET kendisinde IReadOnlyYadaYada <> arayüzleri geri kalanı ile, bilmiyorum. Muhtemelen bazı snafu. Muhtemelen, çarpışma korkusu, bunları .NET'in kendisine koymamasının sebebidir. Bu utanç verici. Ayrıca

, bu soruya bakın: Why does List implement IReadOnlyList in .NET 4.5?

+0

Geç kaldı ama çözüm var. System.Collections.Immutable adlı bir nuget paketidir. –

İlgili konular