为什么在静态构造函数中检查泛型类中的T类型而不是非静态类中更好?

时间:2013-04-05 13:41:11

标签: c# generics

我对此的考虑是为什么任何人都更喜欢在静态构造函数中执行它,如果给定的类型在所有调用中都不正确,则只调用一次,而不是仅仅一次,我会在代码的所有部分中检测到错误类型的异常使用。

这是我的意思的例子:

internal sealed class GenericTypeThatRequiresAnEnum<T> {
    static GenericTypeThatRequiresAnEnum() {
        if (!typeof(T).IsEnum) {
        throw new ArgumentException("T must be an enumerated type");
        }
    }
}

为什么不只是非静态构造函数?

1 个答案:

答案 0 :(得分:4)

因为如果静态构造函数失败,你根本不能使用特定类型。 因此,没有必要在任何地方检查类型参数。

 public class Test<T>
    {
        static Test()
        {
            throw new InvalidOperationException();
        }
    }

用法:

new Test<string>(); //throws TypeInitializationException