Keywords are predefined, reserved identifiers that have special meanings to the compiler. You can't use them as identifiers in your program unless you prefix them with @. For example, @if is a valid identifier, but if isn't because if is a keyword.
ms.custom: "updateeachrelease"
The C# language reference documents the most recently released version of the C# language. It also contains initial documentation for features in public previews for the upcoming language release.
The documentation identifies any feature first introduced in the last three versions of the language or in current public previews.
The first table in this article lists keywords that are reserved identifiers in any part of a C# program. The second table lists the contextual keywords in C#. Contextual keywords have special meaning only in a limited program context and can be used as identifiers outside that context. Generally, as new keywords are added to the C# language, they're added as contextual keywords to avoid breaking programs written in earlier versions.
[`abstract`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/abstract)
[`as`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/type-testing-and-cast#the-as-operator)
[`base`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/base)
[`bool`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/bool)
[`break`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/jump-statements#the-break-statement)
[`byte`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`case`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements#the-switch-statement)
[`catch`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements#the-try-catch-statement)
[`char`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/char)
[`checked`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/checked-and-unchecked)
[`class`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class)
[`const`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const)
[`continue`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/jump-statements#the-continue-statement)
[`decimal`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types)
[`default`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/default)
[`delegate`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types)
[`do`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements#the-do-statement)
[`double`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types)
[`else`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements#the-if-statement)
[`enum`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/enum)
[`event`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/event)
[`explicit`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators)
[`extern`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern)
[`false`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/bool)
[`finally`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements#the-try-finally-statement)
[`fixed`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/fixed)
[`float`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types)
[`for`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements#the-for-statement)
[`foreach`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements#the-foreach-statement)
[`goto`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/jump-statements#the-goto-statement)
[`if`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements#the-if-statement)
[`implicit`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators)
[`in`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/in)
[`int`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`interface`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/interface)
[`internal`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/internal)
[`is`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/is)
[`lock`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/lock)
[`long`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`namespace`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/namespace)
[`new`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/new)
[`null`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/null)
[`object`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types)
[`operator`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading)
[`out`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out)
[`override`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/override)
[`params`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/method-parameters#params-modifier)
[`private`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private)
[`protected`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/protected)
[`public`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/public)
[`readonly`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/readonly)
[`ref`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref)
[`return`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/jump-statements#the-return-statement)
[`sbyte`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`sealed`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/sealed)
[`short`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`sizeof`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/sizeof)
[`stackalloc`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/stackalloc)
[`static`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static)
[`string`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types)
[`struct`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/struct)
[`switch`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/switch-expression)
[`this`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/this)
[`throw`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements#the-throw-statement)
[`true`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/bool)
[`try`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/exception-handling-statements#the-try-statement)
[`typeof`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/type-testing-and-cast#the-typeof-operator)
[`uint`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`ulong`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`unchecked`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/checked-and-unchecked)
[`unsafe`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/unsafe)
[`ushort`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`using`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using)
[`virtual`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/virtual)
[`void`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/void)
[`volatile`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/volatile)
[`while`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements#the-while-statement) Contextual keywords
A contextual keyword provides a specific meaning in the code, but it isn't a reserved word in C#. Some contextual keywords, such as partial and where, have special meanings in two or more contexts.
[`add`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/add)
[`allows`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/where-generic-type-constraint)
[`alias`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias)
[`and`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns#logical-patterns)
[`ascending`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ascending)
[`args`](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/top-level-statements#args)
[`async`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/async)
[`await`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/await)
[`by`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/by)
[`closed`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/closed)
[`descending`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/descending)
[`dynamic`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/reference-types)
[`equals`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/equals)
[`extension`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extension)
[`field`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/field)
[`file`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/file)
[`from`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/from-clause)
[`get`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/get)
[`global`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/namespace-alias-qualifier)
[`group`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/group-clause)
[`init`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/init)
[`into`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/into)
[`join`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join-clause)
[`let`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/let-clause)
[`managed` (function pointer calling convention)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code#function-pointers)
[`nameof`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/nameof)
[`nint`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`not`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns#logical-patterns)
[`notnull`](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters#notnull-constraint)
[`nuint`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
[`on`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/on)
[`or`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/patterns#logical-patterns)
[`orderby`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/orderby-clause)
[`partial` (type)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/partial-type)
[`partial` (member)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/partial-member)
[`record`](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/types/records)
[`remove`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/remove)
[`required`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/required)
[`safe`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/safe)
[`scoped`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/declarations#scoped-ref)
[`select`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/select-clause)
[`set`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/set)
[`unmanaged` (function pointer calling convention)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code#function-pointers)
[`unmanaged` (generic type constraint)](https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/constraints-on-type-parameters#unmanaged-constraint)
[`value`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/value)
[`var`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/declarations#implicitly-typed-local-variables)
[`when` (filter condition)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/when)
[`where` (generic type constraint)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/where-generic-type-constraint)
[`where` (query clause)](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/where-clause)
[`with`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/with)
[`yield`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/yield)