相关疑难解决方法(0)

C#Generic Static Constructor

是否会为传递给泛型参数的每个类型运行泛型类上的静态构造函数,例如:

 class SomeGenericClass<T>
 {
      static List<T> _someList;
      static SomeGenericClass()
      {
          _someList = new List<T>();
      }
 }
Run Code Online (Sandbox Code Playgroud)

使用这种方法是否有任何缺点?

c# generics

52
推荐指数
1
解决办法
9566
查看次数

C#7.3枚举约束:为什么我不能使用enum关键字?

为了将泛型类型参数约束为枚举类型,我之前将它们限制为这样,这是我在C#7.3之前为枚举约束类型T的最佳方法:

void DoSomething<T>() where T : struct, IComparable, IConvertible, IFormattable
Run Code Online (Sandbox Code Playgroud)

现在,C#7.3添加了一个新功能来约束泛型类型System.Enum.我尝试使用今天发布VS2017 15.7更新的枚举约束,并且当我这样写时它会成功编译(假设我有一个using System;指令):

void DoSomething<T>() where T : Enum
Run Code Online (Sandbox Code Playgroud)

但是,使用enum关键字不起作用并导致编译器抛出以下错误(后面有更多错误,期待一个方法体,但我猜这里并不值得一提):

void DoSomething<T>() where T : enum
                                ^ error CS1031: Type expected
                                  error CS1002: ; expected
                                    ^ error CS1001: Identifier expected
                                      error CS1514: { expected
                                      error CS1513: } expected
Run Code Online (Sandbox Code Playgroud)

由于有一个struct约束适用于结构,我不明白为什么enum这里不适用于枚举.这是真正的enum不映射到一个实际的类型一样int会为这样做Int32,但我认为它应该表现一样的struct约束.

我是否只是陷入了尚未完全实现的实验性特征陷阱,或者是否在规范中故意这样做(为什么?)?

c# generics enums c#-7.3

19
推荐指数
1
解决办法
2937
查看次数

标签 统计

c# ×2

generics ×2

c#-7.3 ×1

enums ×1