C#:关于使用泛型和选择随机类型的问题

标签 c#

在我的游戏中,我使用了一个加电系统,其基本工作原理如下:

  • 敌人被杀,有随机几率掉落能量箱
  • 拾取能量箱即可获得随机元素

为玩家提供随机加电的代码如下所示......

Type t = RandomManager.PickFromParams<Type>(typeof(PowerupInvincible), typeof(PowerupDoubleFireRate));
ply.AddPowerup<t>();

还有AddPowerup<>()方法如下:

public void AddPowerup<T>() where T : PowerupEffect, new()
{
    var powerup = new T();

    powerup.Activate(this);
    powerups.Add(powerup);
}

现在,问题是 ply.AddPowerup<t>()行,因为它提示找不到类型 t:

The type or namespace name 't' could not be found (are you missing a using directive or an assembly reference?)

有谁知道是否有办法解决这个问题,或者如果不可能,请告诉我更好的方法?提前致谢!

最佳答案

听起来您在这种情况下没有正确使用泛型。我假设 PowerupInvinciblePowerupDoubleFireRate 继承自某些 PowerupBase:

PowerupBase powerUp = RandomManager.PickFromParams<PowerupBase>(typeof(PowerupInvincible), typeof(PowerupDoubleFireRate));

ply.AddPowerup(powerUp);

那么方法签名简单需要是:

public void AddPowerup(PowerupBase powerup)
{
    powerup.Activate(this);
    powerups.Add(powerup);
}

您的随机管理器将负责选择参数之一,实例化它,然后返回实例。

关于C#:关于使用泛型和选择随机类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152569/

相关文章:

c# - DllImport 与 ComImport

c# - 扩展方法与实例方法与静态类

c# - Visual Studio 智能感知搞砸了

c# - Azure 函数遇到 System.Net.Sockets.SocketException

c# - ServiceBusSender 在一天后停止工作

c# - 是否可以将 c# 嵌入到微 Controller 中

c# - 使用接口(interface)序列化子集合

c# - 抽象不能代替部分吗?

c# - 这段代码是防御性编程,还是不好的做法?

c# - 关于 OAUTH2 和自定义身份提供者的困惑