3

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

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

3 回答 3

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,并且doubleSystem.Double,等等。

于 2011-10-06T07:30:06.803 回答
3

“结构”限制是什么意思?

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

我想知道它仅表示结构或从值类型派生的任何类型,如 int、double、enum、ant 等。下一个代码可以让我使用简单类型吗?

您所谓的“简单类型”,例如和int,只不过是对应于and结构的 C# 关键字,以及基于的类(这使得枚举也是值类型,尽管它本身就是一个类)。doubleenumSystem.Int32System.DoubleSystem.EnumSystem.ValueTypeEnum

where T : struct因此,这些类型与常规结构一样也满足约束。

于 2011-10-06T07:35:08.210 回答
0

取自C# 语言规范第 4.1.10 章:

相反,不可为空的值类型是 System.Nullable 及其简写 T? 之外的任何值类型。(对于任何 T),加上任何被约束为不可空值类型的类型参数(即任何具有结构约束的类型参数)

所以是的,这基本上意味着 T 仅限于值类型,而不是引用类型。

于 2011-10-06T07:35:16.237 回答