这是C#中泛型类或方法中的“struct”限制。我想知道它只表示结构或任何从值类型派生的类型,如int,double,enum,ant等。下一个代码是否允许我使用简单类型?
class SomeGenericClass <T> where T : struct
{
//some inplementation
}
答案 0 :(得分:3)
这意味着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
,依此类推。
答案 1 :(得分:3)
'struct'限制是什么意思?
它表示任何不可为空的值类型。所有结构都是值类型。
我想知道它只表示结构或任何从值类型派生的类型,如int,double,enum,ant等。下一个代码是否允许我使用简单类型?
您所谓的“简单类型”,例如int
,double
和enum
只不过是与System.Int32
和{{1}对应的C#关键字} structs和System.Double
类基于System.Enum
(这使得枚举也值类型,尽管System.ValueType
本身就是一个类)。
因此,这些类型也满足Enum
约束以及常规结构。
答案 2 :(得分:0)
取自C# language specification章4.1.10:
非可空值类型相反是System.Nullable以外的任何值类型及其简写T? (对于任何T),加上任何被约束为非可空值类型的类型参数(即具有结构约束的任何类型参数)。
所以是的,这基本上意味着T仅限于值类型,而不是引用类型。