C# – 静态类型不能用作类型参数

我有一个generics类,可以帮助我对参数值进行检查

internal sealed class Argument where T : class { private void TraceAndThrow(Exception ex) { new InternalTraceHelper().WriteError(ex); throw ex; } internal void ThrowNull(object value, string argName) { if (ReferenceEquals(value, null)) { TraceAndThrow(new ArgumentNullException(argName)); } } internal void ThrowIf(bool condition, string argName) { if (condition) { TraceAndThrow(new ArgumentException(null, argName)); } } internal void ThrowNotInEnum(Type enumType, object value) { if (!Enum.IsDefined(enumType, value)) { TraceAndThrow(new ArgumentOutOfRangeException(Resources.ArgEnumIllegalVal.InvariantFormat(value))); } } } 

但是当我尝试将它与静态类一起使用时:

 internal static class Class1 { private static Argument _arg; } 

我收到此错误(在编译时):

静态类型不能用作类型参数

我做错了什么?

这是故意的。

静态类试图防止不恰当的使用,因此在几乎所有情况下,您都不能在通常需要类型实例的情况下使用它们,并且包括类型参数。

有关可以引用静态类类型的非常有限的一组情况,请参阅C#4规范的 10.1.1.3.1节。

generics仅适用于实例,而不适用于静态类。

由于静态类无法实例化,因此永远不能使用静态类型创建Argument

由于静态类不会有实例成员,我担心的是我将要用它们做什么样的事情。

我相信,缺少你不能使用静态类作为generics参数,我相信你需要使用扩展方法而不是generics类。

你做错了是使用静态类型作为generics类型参数。