我有更新函数,我想根据输入参数重载(无论是值类型还是引用类型)
public void Update<T>(T item) where T : ValueType
编译器有错误,它坚持我不能使用值类型(并且更多地作为约束)。我应该放弃还是有一种巧妙的方法可以根据我想要的类型重载方法?
我有更新函数,我想根据输入参数重载(无论是值类型还是引用类型)
public void Update<T>(T item) where T : ValueType
编译器有错误,它坚持我不能使用值类型(并且更多地作为约束)。我应该放弃还是有一种巧妙的方法可以根据我想要的类型重载方法?
如果您想要一个值类型(不可为空),请使用结构:
public void Update<T>(T item) where T : struct
您可以使用它where T : struct
来强制它T
是一个不可为空的值类型(这不适用于Nullable<T>
,尽管它是一个值类型)。
但是,这不会帮助您实现更大的目标,因为您不能通过类型约束重载 - 所以这是无效的:
// Invalid overloading
void Foo<T>(T item) where T : class
void Foo<T>(T item) where T : struct
基本上,尽管类型参数的数量是方法签名的一部分(就重载而言),但名称和约束却不是。
有一些可怕的方法可以解决这个问题,但我建议使用不同的方法名称。