开放类型可以是结构吗?

时间:2010-12-22 18:31:33

标签: c# generics struct

由于性能原因,我有一些结构类型,并且有一些共性。我想知道我是否可以将它们重构为开放式结构 - 如果可以的话,我是否应该期待任何问题。

2 个答案:

答案 0 :(得分:5)

是的,你可以。框架库提供的一些泛型类型(例如KeyValuePair<TKey, TValue>)确实是structs

答案 1 :(得分:4)

更新:显然,“开放式”并不意味着与“开放式”的C#规范定义相同。你的意思是“泛型”。

是的,结构可以是通用的。

回答你问题的第二部分:我不知道你有什么样的“问题”。你能给我一个你觉得有问题的例子吗?


原始答案,假设您实际上询问开放类型:

C#规范在这一点上很清楚:

  

•A   type参数定义一个开放类型。

     

•如果和,数组类型是开放类型   只有当它的元素类型是开放的   类型。

     

•构造类型是开放的   当且仅当一个或多个时,才输入   type参数是一个开放类型。一个   构造嵌套类型是开放的   当且仅当一个或多个时,才输入   类型参数或类型参数   其含有的类型是开放的   类型。

所以你去吧。结构类型是一种开放类型,当且仅当它或其封闭类型是一个泛型类型,其类型参数之一具有开放类型。例如:

struct S<T>
{
  S<T> s1; // open struct type
  Nullable<S<T>> s2; // another open struct type
}

class O<V>
{
  class C<U> where U : struct
  {
    struct R
    {
      U u; // open type constrained to be value type
      R r1; // open struct type; this is O<V>.C<U>.R
      O<V>.C<S<U>>.R r2; // another open struct type.
      O<int>.C<S<V>>.R r3; // another open struct type 
    }
  }
}

我们可以整天继续制作开放的结构类型。