我将只专注于提供解决方案。你可以让 DieGameAction 使用 IList < object > 代替:
class DieGameAction : IGameAction {
IList<object> gameObjectList;
public DieGameAction(IList<object> objectList) {
gameObjectList = objectList;
}
}
然后,您可以提供适应任何 IList < T > 的 IList < object > 实现。
public abstract class IGroup<T> : IEnumerable where T : class {
protected List<T> groupMembers;
protected List<IGameAction> groupIGameActionList;
public IGroup() {
groupMembers = new List<T>();
groupIGameActionList = new List<IGameAction>();
groupIGameActionList.Add(new DieGameAction(new ObjectListAdapter<T>(groupMembers)));
}
}
我将尝试提供许多可能的解决方案之一,使用 System.Collections.ObjectModel.Collection < T > 作为基础,它也可以包装 IList < T >:
public class ObjectListAdapter<T> : System.Collections.ObjectModel.Collection<T>, IList<object>
{
public ObjectListAdapter(IList<T> wrappedList)
: base(wrappedList)
{
}
public int IndexOf(object item)
{
return base.IndexOf((T)item);
}
public void Insert(int index, object item)
{
base.Insert(index, (T)item);
}
public new object this[int index]
{
get
{
return base[index];
}
set
{
base[index] = (T)value;
}
}
public void Add(object item)
{
base.Add((T)item);
}
public bool Contains(object item)
{
return base.Contains((T)item);
}
public void CopyTo(object[] array, int arrayIndex)
{
this.Cast<object>().ToArray().CopyTo(array, arrayIndex);
}
public bool IsReadOnly
{
get { return false; }
}
public bool Remove(object item)
{
return base.Remove((T)item);
}
public new IEnumerator<object> GetEnumerator()
{
return this.Cast<object>().GetEnumerator();
}
}
列表更改将在尝试使用不受支持的对象时引发类型转换异常,就像我在此处对其进行编程的方式一样,但您也可以随意处理。
现在,对于 IList < object > 您也可以尝试使用 IList 代替,这也是由 List < T > 实现的,因此您基本上无需再做任何事情即可使其正常工作。
请注意,重要的是列表在使用的两个地方都将显示相同,因为它们基本上将使用相同的底层 List 对象。
让我知道这是否回答了您的问题,将其标记为答案,或者不要避免:)