在定义泛型类型约束时,这两个等价项是:
public void Method<T>(T parameter) where T : struct { }
和
public void Method<T>(T parameter) where T : ValueType { }
从博士,我强烈怀疑它们是一样的:
尽管ValueType是值类型的隐式基类,但不能创建直接从ValueType继承的类。相反,单个编译器提供语言关键字或构造(例如C#中的struct和结构…)。( Visual Basic中的End结构)以支持值类型的创建。
但我想确保。
发布于 2020-08-06 01:02:09
它们不一样,因为第二个不编译
错误CS0702:约束不能是特殊类“ValueType”
然而,是的:T : struct
的意思是"T是一个值类型“。微妙的区别在于,在理论上,Method<ValueType>()
本身会满足T : ValueType
,而ValueType
是class
,而不是struct
。
此外,T : struct
不允许您使用可空的T?
,即Method<int?>
是不合法的,尽管int?
(又名Nullable<int>
)是一种值类型。
https://stackoverflow.com/questions/63280159
复制