Options, Text Editor, C#, Advanced

Use the Advanced options page to modify the settings for editor formatting, code refactoring, and XML documentation comments for C#. To access this options page, choose Tools > Options, and then choose Text Editor > C# > Advanced.

Note

Not all options may be listed here.

Analysis

  • Run background code analysis for ...

    Choose one of the following options.

    Option Description
    None All analyzers and corresponding code fixes are disabled.

    Compiler diagnostics and corresponding code fixes are enabled on all open documents.
    Current document (default) All analyzers run just on the currently active document.

    Compiler diagnostics are enabled on all open documents.
    Open documents All analyzers and compiler diagnostics are enabled on all open documents.
    Entire solution All analyzers and compiler diagnostics are enabled on all documents in the solution, whether open or closed.

Using Directives

  • Place 'System' directives first when sorting usings

    When selected, the Remove and Sort Usings command in the right-click menu sorts the using directives and places the 'System' namespaces at the top of the list.

    Before sorting:

    using AutoMapper;
    using FluentValidation;
    using System.Collections.Generic;
    using System.Linq;
    using Newtonsoft.Json;
    using System;
    

    After sorting:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using AutoMapper;
    using FluentValidation;
    using Newtonsoft.Json;
    
  • Separate using directive groups

    When selected, the Remove and Sort Usings command in the right-click menu separates using directives by inserting an empty line between groups of directives that have the same root namespace.

    Before sorting:

    using AutoMapper;
    using FluentValidation;
    using System.Collections.Generic;
    using System.Linq;
    using Newtonsoft.Json;
    using System;
    

    After sorting:

    using AutoMapper;
    
    using FluentValidation;
    
    using Newtonsoft.Json;
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
  • Suggest usings for types in .NET Framework assemblies

  • Suggest usings for types in NuGet packages

    When these options are selected, a Quick Action is available to install a NuGet package and add a using directive for unreferenced types.

    Quick Action to install NuGet package in Visual Studio

  • Add missing using directives on paste

    When this option is selected, using directives will automatically get added to your code when you paste a type to a file.

Highlighting

  • Highlight references to symbol under cursor

    When the cursor is positioned inside a symbol, or when you click a symbol, all the instances of that symbol in the code file are highlighted.

Outlining

  • Enter outlining mode when files open

    When selected, automatically outlines the code file, which creates collapsible blocks of code. The first time a file is opened, #regions blocks and inactive code blocks collapse.

  • Show procedure line separators

    The text editor indicates visual scope of procedures. A line is drawn in the .cs source files of your project at locations listed in the following table:

    Location in .cs Source File Example of Line Location
    After the close of a block declaration construct - At the end of a class, structure, module, interface, or enum
    - After a property, function, or sub
    - Not between the get and set clauses in a property
    After a set of single line constructs - After the import statements, before a type definition in a class file
    - After variables declared in a class, before any procedures
    After single line declarations (non-block level declarations) - Following import statements, inherits statements, variable declarations, event declarations, delegate declarations, and DLL declare statements

Block Structure Guides

Select these check boxes to display dotted vertical lines between the curly brackets ({}) in your code. You can then easily see individual blocks of code for your declaration level and code level constructs.

Comments

  • Generate XML documentation comments for ///

    When selected, inserts the XML elements for XML documentation comments after you type the /// comment introduction. For more information about XML documentation, see XML Documentation Comments (C# Programming Guide).

Extract Method

  • Don't put ref or out on custom struct

    Uncheck this checkbox to avoid potentionally unintended cloning of structs by refencing existing struct objects when extracting an expression into a method call.

    Example

    Supposed the following class and struct exist in your code:

    public struct CustomStruct
    {
        private int Count;
    
        public int Bump => ++Count;
    }
    
    public class CustomClass
    {
        public void DoIt()
        {
           CustomStruct cs = new CustomStruct();
           int i = 0;
    
           i += cs.Bump;   // select this line
        }
    }
    

    If the "Don't put ref or out on custom struct" option is unchecked, then the "Extract method" feature generates the following:

    public class CustomClass
    {
        public void DoIt()
        {
           CustomStruct cs = new CustomStruct();
           int i = 0;
    
           NewMethod(ref cs, ref i);
        }
    
        private static void NewMethod(ref CustomStruct cs, ref int i)
           => i += cs.Bump;
    }
    

    If the "Don't put ref or out on custom struct" option is checked, then the "Extract method" feature generates the following:

    public class CustomClass
    {
        public void DoIt()
        {
           CustomStruct cs = new CustomStruct();
           int i = 0;
    
           i = NewMethod(cs, i);
        }
    
        private static int NewMethod(CustomStruct cs, int i)
        {
           i += cs.Bump;
           return i;
        }
    }
    

Inline Hints

  • Inline Parameter Name Hints

    When selected, inserts parameter name hints for literals, cast literals, and object instantiations prior to each argument in function calls.

    Inline Parameter Name Hints for CSharp

  • Inline Type Hints

    When selected, inserts type hints for variables with inferred types and lambda parameter types.

    Inline Type Hints for CSharp

Inheritance Margin

  • When selected, adds icons to the margins representing your code's implementations and overrides. Clicking on the inheritance margin icons will display inheritance options that you can select to navigate to.

    Inheritance Margin

See also