Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# - static types cannot be used as type arguments

I've a generic class, that helps me to do checks on argument values

internal sealed class Argument<T>     where T : class {     private void TraceAndThrow(Exception ex)     {         new InternalTraceHelper<T>().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)));         }     } } 

But when I try to use it with a static class :

internal static class Class1 {     private static Argument<Class1> _arg; } 

I got this error (at compilation):

static types cannot be used as type arguments

What I'm doing wrong?

like image 641
Arnaud F. Avatar asked May 02 '11 14:05

Arnaud F.


People also ask

What C is used for?

C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...

Is C language easy?

Compared to other languages—like Java, PHP, or C#—C is a relatively simple language to learn for anyone just starting to learn computer programming because of its limited number of keywords.

What is C in C language?

What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.

What is the full name of C?

In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.


1 Answers

This is deliberate.

Static classes try to prevent inappropriate use, so in almost all situations, you can't use them in situations where you'd normally want an instance of the type... and that includes type arguments.

See section "Static classes" of the C# 6 spec for the very limited set of situations in which you can refer to static class types.

like image 113
Jon Skeet Avatar answered Oct 13 '22 11:10

Jon Skeet