'struct'限制意味着什么?

时间:2011-10-06 07:28:02

标签: c# .net generics restrictions

这是C#中泛型类或方法中的“struct”限制。我想知道它只表示结构或任何从值类型派生的类型,如int,double,enum,ant等。下一个代码是否允许我使用简单类型?

class SomeGenericClass <T> where T : struct
{
 //some inplementation
}

3 个答案:

答案 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

至于intdoublefloat和其他内置类型,它们都是值类型。这些关键字中的每一个都对应于框架中定义的结构。例如,int基本上是System.Int32doubleSystem.Double,依此类推。

答案 1 :(得分:3)

  

'struct'限制是什么意思?

它表示任何不可为空的值类型。所有结构都是值类型。

  

我想知道它只表示结构或任何从值类型派生的类型,如int,double,enum,ant等。下一个代码是否允许我使用简单类型?

您所谓的“简单类型”,例如intdoubleenum只不过是与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仅限于值类型,而不是引用类型。