使用Type约束重载方法

时间:2012-08-15 15:14:51

标签: c# generics constraints

我有更新功能,我想根据输入参数重载(无论是值类型还是引用类型)

public void Update<T>(T item) where T : ValueType

编译器有错误并且它坚持我不能使用valuetype(并且将更多作为约束)。 我应该放弃还是根据我想要的类型有一种简洁的方法来重载方法?

2 个答案:

答案 0 :(得分:3)

如果需要值类型(不可为空),请使用结构:

public void Update<T>(T item) where T : struct

答案 1 :(得分:1)

您可以使用where T : struct强制T是不可为空的值类型(此Nullable<T>一起使用,尽管它是价值类型)。

然而,这不会帮助你实现更大的目标,因为你不能按类型约束重载 - 所以这是无效的:

// Invalid overloading
void Foo<T>(T item) where T : class
void Foo<T>(T item) where T : struct

基本上,虽然类型参数的 number 是方法签名的一部分(就重载而言),但名称和约束不是。

horrible ways round this,但我建议使用不同的方法名称。