0

我有一个清单List<object>。我如何才能限制它Class1并且Class2应该在列表中使用?

Class1并且Class2基本不同。我猜想这两个类都有什么基本类,并限制 List 只能使用它,但真的不知道。

4

2 回答 2

9

创建一个两个类都实现的接口

public interface MyInterface 
{
}

public class Class1 : MyInterface
{
}

public class Class2 : MyInterface
{
}

List<MyInterface> myList = new List<MyInterface>();

可以在列表中引用的类的唯一实例是那些实现MyInterface接口的实例。在这种情况下,只有Class1Class2

于 2013-05-23T07:25:49.947 回答
2

我相信Bazz 的答案 是处理此类要求的正确方法。

但是,您可以尝试另一种方法:

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

} 
于 2013-05-23T07:37:55.543 回答