这是 C# 中泛型类或方法中的“结构”限制。我想知道它仅表示结构或从值类型派生的任何类型,如 int、double、enum、ant 等。下一个代码可以让我使用简单类型吗?
class SomeGenericClass <T> where T : struct
{
//some inplementation
}
这是 C# 中泛型类或方法中的“结构”限制。我想知道它仅表示结构或从值类型派生的任何类型,如 int、double、enum、ant 等。下一个代码可以让我使用简单类型吗?
class SomeGenericClass <T> where T : struct
{
//some inplementation
}
这意味着T
只能是值类型。值类型只是那些用struct
关键字和 enum
关键字定义的数据结构。
例如,
struct A{}; //value-type
struct B{}; //value-type
class C{}; //reference-type
enum D {}; //value-type
SomeGenericClass<A> a; //ok
SomeGenericClass<B> b; //ok
SomeGenericClass<C> c; //compilation error - C is not value type
SomeGenericClass<D> d; //ok
至于int
, double
,float
和其他内置类型,它们都是值类型。这些关键字中的每一个都对应于框架中定义的结构。例如,int
基本上是System.Int32
,并且double
是System.Double
,等等。
“结构”限制是什么意思?
它表示任何不可为空的值类型。所有结构都是值类型。
我想知道它仅表示结构或从值类型派生的任何类型,如 int、double、enum、ant 等。下一个代码可以让我使用简单类型吗?
您所谓的“简单类型”,例如和int
,只不过是对应于and结构的 C# 关键字,以及基于的类(这使得枚举也是值类型,尽管它本身就是一个类)。double
enum
System.Int32
System.Double
System.Enum
System.ValueType
Enum
where T : struct
因此,这些类型与常规结构一样也满足约束。
取自C# 语言规范第 4.1.10 章:
相反,不可为空的值类型是 System.Nullable 及其简写 T? 之外的任何值类型。(对于任何 T),加上任何被约束为不可空值类型的类型参数(即任何具有结构约束的类型参数)。
所以是的,这基本上意味着 T 仅限于值类型,而不是引用类型。