【发布时间】:2018-05-08 03:03:42
【问题描述】:
如果我有代码:
List<Type> Requires = new List<Type>();
我将如何限制此列表中的类型以使它们具有共同的父对象?
例如:
List<Type : Component> Requires = new List<Type>()
编辑:多一点背景,也许人们可以理解我为什么需要这个。我有一个类Entity,其中包含Components 的列表。每个组件都需要有一个 Component 类型列表,作为依赖项列表。因此,在运行时,当您尝试将 Component 添加到 Entity 时,它会快速检查 Entity 是否已附加所需的组件。
例子:
//Entity.cs
//...
_components = new List<Component>();
//...
public T AddComponent<T>() where T : Component, new()
{
var temp = new T();
if (_components.Exists((x) => x is T)) return null;
foreach (var t in temp.Requires)
{
if (_components.Exists(x => x.GetType() == t)) return null;
}
_components.Add(new T());
temp.gameObject = this;
return temp;
}
//...
//Component.cs
//...
protected internal Entity gameObject;
protected internal List<Type> Requires { get; }
//...
【问题讨论】:
-
为什么不直接说
List<Component> Requires = new List<Component>()?该列表中的每个项目都是Component或Component的子类。 -
我认为他在谈论
System.Type类。 -
我说的是
System.Type类。我将其中的一堆存储在一个列表中,这样我就可以对照一个组件列表检查它们,看看是否有任何重复。
标签: c# list inheritance types