是否有一个只读的ISet接口?

时间:2014-05-14 15:24:33

标签: c#

我想知道是否有任何类似set的readonly接口在C#中声明了Contains方法。我不想只实现ISet接口,因为它有太多不必要的方法。

我的想法实现就像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");
   }
} 

我可以定义自己的IReadOnlySet,但希望确保在我之前没有内置的。{/ p>

2 个答案:

答案 0 :(得分:4)

不,C#中没有IReadOnlySet<T>接口。根据您所描述的需求,我认为您应该创建自己的IContains<T>界面。

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

请注意,这不能添加到List<T>HashSet<T>等现有集合中,并且不包含任何其他类似集合的操作,如Count或枚举。您可以像以下一样使用它:

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

答案 1 :(得分:3)