我有一个清单List<object>
。我如何才能限制它Class1
并且Class2
应该在列表中使用?
Class1
并且Class2
基本不同。我猜想这两个类都有什么基本类,并限制 List 只能使用它,但真的不知道。
我有一个清单List<object>
。我如何才能限制它Class1
并且Class2
应该在列表中使用?
Class1
并且Class2
基本不同。我猜想这两个类都有什么基本类,并限制 List 只能使用它,但真的不知道。
创建一个两个类都实现的接口
public interface MyInterface
{
}
public class Class1 : MyInterface
{
}
public class Class2 : MyInterface
{
}
List<MyInterface> myList = new List<MyInterface>();
可以在列表中引用的类的唯一实例是那些实现MyInterface
接口的实例。在这种情况下,只有Class1
和Class2
。
我相信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();
}
}