【问题标题】:What does 'struct' restriction mean?“结构”限制是什么意思?
【发布时间】:2011-12-02 01:09:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net generics restrictions


    【解决方案1】:

    这意味着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.Int32double就是System.Double,以此类推。

    【讨论】:

      【解决方案2】:

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

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

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

      您所谓的“简单类型”,例如 intdoubleenum 只不过是对应于 System.Int32System.Double 结构的 C# 关键字,以及 System.Enum 类基于System.ValueType(这使得枚举也是值类型,尽管Enum 本身就是一个类)。

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

      【讨论】:

      • 谢谢。我认为“简单类型”不是从像结构这样的值类型派生的。
      【解决方案3】:

      取自C# language specification 第 4.1.10 章:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        相关资源
        最近更新 更多