我有更新功能,我想根据输入参数重载(无论是值类型还是引用类型)
public void Update<T>(T item) where T : ValueType
编译器有错误并且它坚持我不能使用valuetype(并且将更多作为约束)。 我应该放弃还是根据我想要的类型有一种简洁的方法来重载方法?
答案 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,但我建议使用不同的方法名称。