这是 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# 关键字,以及基于的类(这使得枚举也是值类型,尽管它本身就是一个类)。doubleenumSystem.Int32System.DoubleSystem.EnumSystem.ValueTypeEnum
where T : struct因此,这些类型与常规结构一样也满足约束。
取自C# 语言规范第 4.1.10 章:
相反,不可为空的值类型是 System.Nullable 及其简写 T? 之外的任何值类型。(对于任何 T),加上任何被约束为不可空值类型的类型参数(即任何具有结构约束的类型参数)。
所以是的,这基本上意味着 T 仅限于值类型,而不是引用类型。