如何比较通用类型usnig c语言



我正在Unity中制作一个游戏,我使用一种工厂模式,需要创建一个特定类型的Tile对象,我不知道如何在C#中比较类型。

这是我的代码:

public T SpawnTile<T>(Vector3 startPosition) where T : Tile
{
Tile t;
if(T == MountainTile) // This line
{
t = new MountainTile();
}
if (T == WaterTile) // And this line
{
t = new WaterTile();
}
return (T)t;
}

我到处搜索,只发现obj是Type的用法,但在我的情况下,我想比较通用类型T。

我也试过Types.Equals(T, WaterTile),但没用。有什么建议吗?

当然,您可以使用typeof关键字进行比较:

public T SpawnTile<T>(Vector3 startPosition) where T : Tile
{
T t;
if(typeof(T) == typeof(MountainTile)) // This line
{
t = new MountainTile();
}
if (typeof(T) == typeof(WaterTile)) // And this line
{
t = new WaterTile();
}
return t;
}

但是,正如评论中所提到的,如果可能的话,最好使用新的约束:

public T SpawnTile<T>(Vector3 startPosition) where T : Tile, new()
{
T t = new T();
// Other actions...
return t;
}

这对你有用吗?

Tile t;
var type = T as Type
switch (type)
{
case Type _ when type == typeof(MountainTile):
t = new MountainTile();
break;
case Type _ when type == typeof(WaterTile):
t = new WaterTile();
break;
}

最新更新