C#idiomatic C#
keywordscsharp/language-reference

Language

C# keywords

C# Keywords: Find the reference material for the predefined keywords and contextual keywords defined in the C# language.

  • page csharp/language-reference/keywords
  • updated 06/05/2026

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.

text
    [`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.

text
    [`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)