我有List<object>
的列表。如何限制只有Class1
和Class2
应该使用列表?
Class1
和Class2
基本不同。我猜这个类的基本类是什么,限制List只能用它,但实际上不知道。
答案 0 :(得分:8)
创建两个类都实现的接口
public interface MyInterface
{
}
public class Class1 : MyInterface
{
}
public class Class2 : MyInterface
{
}
List<MyInterface> myList = new List<MyInterface>();
列表中可以引用的类的唯一实例是实现MyInterface
接口的类。在这种情况下,只有Class1
和Class2
。
答案 1 :(得分:2)
我确信Bazz's answer 是处理此类要求的正确方法。
然而,您可以尝试另一种方法:
public class MyCustomList : ArrayList
{
public override void Add(object item){
if(item is Class1 || item is Class2) {
base.Add(item);
}
else {
throw BadaboomException();
}
}
}
或者您可以通过完全包装集合来确保签名
public class MyCustomList : ICollection
{
private readonly ArrayList m_InnerList = new ArrayList();
public virtual void Add(Class1 item) {
this.m_InnerList.Add(item);
}
public virtual void Add(Class2 item) {
this.m_InnerList.Add(item);
}
public void CopyTo(Array array, int index) {
m_InnerList.CopyTo(array, index);
}
public int Count { get { return m_InnerList.Count; } }
public bool IsSynchronized { get{ return m_InnerList.IsSynchronized; } }
public object SyncRoot { get{ return m_InnerList.SyncRoot; } }
public IEnumerator GetEnumerator(){
return m_InnerList.GetEnumerator();
}
}