0

我想知道是否有一种方法可以传入强制为某种基本类型的类型。例如,对于我的游戏引擎,我有一个属性列表(可控、刚体等)。我有一个 addAttribute 参数,它接受一个新对象。但是,我还想有一个重载,它采用一个类型,而不是我可以自己创建一个新对象的类型。所以例如

public void addAttribut(Type attribute)

我在想也许可以实现 linq 的东西?我已经尝试过,但看起来“where”只能用于泛型:

public void addAttribute(Type attribute) where attribute : Attribute

将是函数的签名。我相信 Unity 可以做到这一点;但是它可能是它可以通过 Mono 做到这一点。

如果它不是正确的基本类型,我总是可以抛出异常。但是我想知道是否有一种方法可以防止程序员一起传递错误的时间。

有任何想法吗?任何帮助是极大的赞赏!

4

1 回答 1

0

如果您乐于在compile-time调用代码以了解类型,则可以将其设为带有类型参数的泛型方法:

public void AddAttribute<T>() where T : Attribute
{
    // Use typeof(T)
}

或者强制执行一个无参数构造函数,然后您可以调用它:

public void AddAttribute<T>() where T : Attribute, new()
{
    T t = new T();
    ...
}

但否则没有办法做到这一点,不 - 你必须在执行时验证参数,就像其他任何方法一样。

于 2012-11-20T15:45:50.033 回答