クイック アクションQuick Actions

クイック アクションを使うと、コードのリファクタリング、生成、その他の変更を、1 つの操作で簡単に行うことができます。Quick Actions let you easily refactor, generate, or otherwise modify code with a single action. クイック アクションは、C#、C++および Visual Basic のコード ファイルで使用できます。Quick Actions are available for C#, C++, and Visual Basic code files. クイック アクションには、言語に固有のものと、すべての言語が対象になるものがあります。Some actions are specific to a language, and others apply to all languages. クイック アクションは、電球アイコン 小さい電球アイコン を使うか、または適切なコード行にカーソルを置いて Ctrl + . キーを押すとQuick Actions can be applied using the Light Bulb icon Small Light Bulb Icon, or by pressing Ctrl + . 適用できます。when your cursor is on the appropriate line of code.

赤い波線が表示され、Visual Studio が問題の修正候補を提供できる場合に、電球アイコンが表示されます。You will see a light bulb if there is a red squiggle and Visual Studio has a suggestion for how to fix the issue. たとえば、赤い波線で示されるエラーがある場合、そのエラーの修正が可能な場合に電球マークが表示されます。For instance if you have an error indicated by a red squiggle, a light bulb will appear when fixes are available for that error. いずれの言語でも、サードパーティは、たとえば SDK の一部として、カスタマイズした診断や提案を表示できます。Visual Studio はそれらの規則に基づいて電球マークを表示します。For any language, third parties can provide custom diagnostics and suggestions, for example as part of an SDK, and Visual Studio light bulbs will light up based on those rules.

電球マークを表示するにはTo see a light bulb

  1. 多くの場合、電球マークはマウスをエラーの地点に移動すると自動的に表示されます。あるいは、カレットをエラーのある行に移動すると、エディターの左端に表示されます。In many cases, light bulbs spontaneously appear when you hover the mouse at the point of an error, or in the left margin of the editor when you move the caret into a line that has an error in it. 赤い波線が表示されている場合にマウス ポインターを重ねると電球マークを表示させることができます。When you see a red squiggle, you can hover over it to display the light bulb. 問題が発生した行のどこかに、マウスやキーボードを使用して移動することで電球マークを表示させることもできます。You can also cause a light bulb to display when you use the mouse or keyboard to go to anywhere in the line where the issue occurs.

  2. 行の任意の場所で Ctrl + . キーを押すと、Press Ctrl + . 電球マークの表示を呼び出して修正候補のリストを直接表示できます。anywhere on a line to invoke the light bulb and go directly to the list of potential fixes.

    電球でのマウス ホバーLight bulb with mouse hovering

修正候補を表示するにはTo see potential fixes

下矢印をクリックするか、修正候補を表示するリンクをクリックすると、電球マークで実行可能なクイック操作のリストが表示されます。Either click on the down arrow or the Show potential fixes link to display a list of quick actions that the light bulb can take for you.

拡大電球Light bulb expanded

共通のクイック アクションCommon Quick Actions

ここでは、C# と Visual Basic 両方のコードに共通に適用されるクイック アクションを示します。Here are some of the common Quick Actions which are applicable to both C# and Visual Basic code.

エラーを修正するアクションActions that fix errors

スペルが正しくない型を修正するCorrect misspelled type

エラー IDError ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS0103、BC30002CS0103, BC30002 C# および Visual BasicC# and Visual Basic Visual Studio 2015 更新プログラム 2Visual Studio 2015 Update 2

Visual Studio で型のスペルを誤って入力した場合、このクイック アクションは自動的にそれを修正します。If you accidentally misspell a type in Visual Studio, this Quick Action will automatically correct it for you. 電球メニューでは ['スペルが正しくない型' を 'スペルが正しい型' に変更] と表示されます。You will see these items in the light bulb menu as "Change 'misspelled type' to 'correct type'. 例:For example:

// Before
private viod MyMethod()
{
}

// Change 'viod' to 'void'

// After
private void MyMethod()
{
}
' Before
Function MyFunction as Intger
End Function

' Change 'Intger' to 'Integer'

' After
Function MyFunction as Integer
End Function

git のマージ競合を解決するResolve git merge conflict

エラー IDError ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS8300、BC37284CS8300, BC37284 C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションを使用すると、"変更を取り入れる" ことで競合するコードおよびマーカーが削除され、git マージ競合を解決することができます。These Quick Actions enable you to resolve git merge conflicts by "taking a change", which removes the conflicting code and markers.

// Before     
private void MyMethod()
{
<<<<<<< HEAD
    if (true)
    {

    }
=======
    if (false)
    {

    }
>>>>>>> upstream
}

// Take changes from 'HEAD'

// After 
private void MyMethod()
{
    if (true)
    {

    }
}

メソッドを同期させるMake method synchronous

エラー IDError ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS1998、BC42356CS1998, BC42356 C# および Visual BasicC# and Visual Basic Visual Studio 2015 更新プログラム 2Visual Studio 2015 Update 2

async/Async キーワードをメソッドで使う場合は、そのメソッド内のどこかで await/Await キーワードも使われることが予想されます。When using the async/Async keyword on a method, it is expected that somewhere inside that method the await/Await keyword will also be used. ただし、そうではない場合は、クイック アクションが表示され、async/Async キーワードを削除して戻り値の型を変更することにより、同期メソッドにすることができます。However, if this isn't the case, a Quick Action will appear that will allow you to make the method synchronous by removing the async/Async keyword and changing the return type. [クイック アクション] メニューの [メソッドを同期させます] オプションを選びます。Use the Make method synchronous option from the Quick Actions menu.

// Before
async Task<int> MyAsyncMethod()
{
    return 3;
}

// Make method synchronous

// After
int MyAsyncMethod()
{
    return 3;
}
' Before
Async Function MyAsyncMethod() As Task(Of Integer)
    Return 3
End Function

' Make method synchronous

' After
Function MyAsyncMethod() As Integer
    Return 3
End Function

メソッドを非同期にするMake method asynchronous

エラー IDError ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS4032、BC37057CS4032, BC37057 C# および Visual BasicC# and Visual Basic Visual Studio 2017Visual Studio 2017

メソッド内で await/Await キーワードを使うときは、メソッド自体に async/Async キーワードが指定されていることが想定されます。When using the await/Await keyword inside of a method, it is expected that the method itself is marked with the async/Async keyword. ただし、そうではない場合は、クイック アクションが表示され、非同期メソッドにすることができます。However, if this isn't the case, a Quick Action will appear that will allow you to make the method asynchronous. [クイック アクション] メニューの [Make method/Function asynchronous (メソッド/関数を非同期にします)] オプションを使います。Use the Make method/Function asynchronous option from the Quick Actions menu.

// Before
int MyAsyncMethod()
{
    return await Task.Run(...);
}

// Make method asynchronous

// After
async Task<int> MyAsyncMethod()
{
    return await Task.Run(...);
}
' Before
Function MyAsyncMethod() as Integer
    Return  Await Task.Run(...)
End Function

' Make method asynchronous

' After
Async Function MyAsyncMethod() As Task(Of Integer)
    Return Await Task.Run(...)
End Function

不要なコードを削除するアクションActions that remove unnecessary code

不必要な using/Import を削除するRemove unnecesary usings/Imports

該当言語Applicable Languages サポートされているバージョンSupported Version
C# および Visual BasicC# and Visual Basic Visual Studio 2015 RTWVisual Studio 2015 RTW

[不要な using の削除] / [不要なインポートの削除] クイック アクションは、現在のファイルで使われていない using および Import ステートメントを削除します。The Remove Unnecessary Usings/Imports Quick Action will remove any unused using and Import statements for the current file. この項目を選ぶと、使われていない名前空間のインポートがすぐに削除されます。When you select this item, unused namespace imports will be immediately removed.

不要なキャストを削除するRemove unnecessary cast

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0004IDE0004 C# および Visual BasicC# and Visual Basic Visual Studio 2015 RTWVisual Studio 2015 RTW

ある型をキャストが不要な別の型にキャストしている場合、[不要なキャストの削除] クイック アクション項目はキャストをコードから削除します。If you cast a type to another type which doesn't require a cast, the Remove Unnecessary Cast Quick Action item will remove the cast from your code.

// before
int number = (int)3;

// Remove Unnecessary Cast

// after
int number = 3;
' Before
Dim number as Integer = CType(3, Integer)

' Remove Unnecessary Cast

' After
Dim number as Integer = 3

未使用の変数を削除するRemove unused variables

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS0219、BC42024CS0219, BC42024 C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションでは、宣言されているがコードで一度も使用されていない変数を削除することができます。This Quick Action enables you to remove variables that have been declared but never used in your code.

// Before
public MyMethod()
{
    var unused = 8;
    var used = 1;
    return DoStuff(used);
}

// Remove unused variables

// After
public MyMethod()
{
    var used = 1;
    return DoStuff(used);
}

既定の値式から型を削除するRemove type from default value expression

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0034IDE0034 C# 7.1+C# 7.1+ Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションは、コンパイラが式の型を推論できる場合に、既定の値式から値の型を削除し、defaultリテラルを使用します。This Quick Action removes the value type from a default value expression and uses the default literal when the compiler can infer the type of the expression.

// Before
void DoWork(CancellationToken cancellationToken = default(CancellationToken)) { ... }

// Simplify default expression

// After
void DoWork(CancellationToken cancellationToken = default) { ... }

不足しているコードを追加するアクションActions that add missing code

参照アセンブリの型、NuGet パッケージの型、またはソリューション内の他の型に using/Import を追加するAdd usings/Imports for types in reference assemblies, NuGet packages, or other types in your solution

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
CS0103、BC30451CS0103, BC30451 C# および Visual BasicC# and Visual Basic Visual Studio 2015 更新プログラム 2Visual Studio 2015 Update 2

ソリューション内の他のプロジェクトにある型を使うとクイック アクションが自動的に表示されますが、それ以外の場合は [ツール] > [オプション] > [C#] または [Basic] > [詳細設定] タブで有効にする必要があります。Using types located in other projects in your solution will display the Quick Action automatically, however the others need to be enabled from the Tools > Options > C# or Basic > Advanced tab:

  • 参照アセンブリの型に using/import を提案するSuggest usings/imports for types in reference assemblies
  • NuGet パッケージの型に using/import を提案するSuggest usings/imports for types in NuGet packages

有効にした場合、現在はインポートされていなくても参照アセンブリまたは NuGet パッケージには存在する名前空間の型を使うと、using/import ステートメントが作成されます。When enabled, if you use a type in a namespace that is currently not imported, but exists in a reference assembly or NuGet package, the using/import statement will be created.

// Before
Debug.WriteLine("Hello");

// using System.Diagnostics;

// After
using System.Diagnostics;

Debug.WriteLine("Hello");
' Before
Debug.WriteLine("Hello")

' Imports System.Diagnostics

// After
Imports System.Diagnostics

Debug.WriteLine("Hello")

足りないケース、既定のケース、または両方を追加するAdd missing cases/default case/both

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0010IDE0010 C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

switch ステートメント (C#) または Select Case ステートメント (Visual Basic) を作成するときは、コード アクションを使って、足りないケース項目、既定のケースのステートメント、または両方を自動的に追加できます。When creating a switch statement in C#, or Select Case statement in Visual Basic, you can use a Code Action to automatically add missing case items, a default case statement, or both. 空のステートメントは次のようになります。For an empty statement like the following:

enum MyEnum
{
    Item1,
    Item2,
    Item3
}

...

MyEnum myEnum = MyEnum.Item1;

switch(myEnum)
{
}
Enum MyEnum
    Item1
    Item2
    Item3
End Enum

...

Dim myEnum as MyEnum = MyEnum.Item1

Select Case myEnum
End Select

[両方を追加する] クイック アクションを使って足りないケースと既定のケースの両方を追加すると、次のようなコードが作成されます。Using the Add Both Quick Action to fill in both missing cases and a default case will create the following:

switch(myEnum)
{
    case MyEnum.Item1:
        break;
    case MyEnum.Item2:
        break;
    case MyEnum.Item3:
        break;
    default:
        break;
}
Select Case myEnum
    Case MyEnum.Item1
        Exit Select
    Case MyEnum.Item2
        Exit Select
    Case Else
        Exit Select
End Select

パラメーターの null チェックを追加するAdd null checks for parameters

該当言語Applicable Languages サポートされているバージョンSupported Version
C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションでは、パラメーターが null であるかどうかを示すチェックをコードに追加できます。This Quick Action enables you to add a check in your code to tell whether a parameter is null.

// Before
class MyClass
{
    public string MyProperty { get; set; }

    public MyClass(string myProperty) // cursor inside myProperty
    {
        MyProperty = myProperty;
    }
}

// Add null check

// After
class MyClass
{
    public string MyProperty { get; set; }

    public MyClass(string myProperty)
    {
        MyProperty = myProperty ?? throw new ArgumentNullException(nameof(myProperty));
    }
}

引数の名前を追加するAdd argument name

該当言語Applicable Languages サポートされているバージョンSupported Version
C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3
// Before
var date = new DateTime(1997, 7, 8);

// Include argument name 'year' (include trailing arguments)

// After
var date = new DateTime(year: 1997, month: 7, day: 8);

中かっこを追加するAdd braces

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0011IDE0011 C#C# Visual Studio 2017 RTWVisual Studio 2017 RTW

"中かっこを追加する" クイック アクションは、単一行の if ステートメントを中かっこで囲みます。The Add braces Quick Action wraps braces around single-line if statements.

// Before
if (true)
    return "hello,world";

// Add braces

// After
if (true) 
{
    return "hello,world";
}

修飾子を追加および順序付けするAdd and order modifiers

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0036IDE0036 C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5
IDE0040IDE0040 C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5

これらのクイック アクションを使用すると、既存のアクセシビリティ修飾子の並べ替えや、不足しているアクセシビリティ修飾子の追加が行えるようになり、修飾子を整理するのに便利です。These Quick Actions help organize modifiers by enabling you to sort existing and add missing accessibility modifiers.

// Before
enum Color
{
    Red, White, Blue
}

// Add accessibility modifiers

// After
internal enum Color
{
    Red, White, Blue
}
// Before
static private int thisFieldIsPublic;

// Order modifiers

// After
private static int thisFieldIsPublic;

コード変換Code transformations

if コンストラクトを switch に変換するConvert if construct to switch

該当言語Applicable Languages サポートされているバージョンSupported Version
C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションでは、if-then-else コンストラクトを switch コンストラクトに変換することができます。This Quick Action enables you to convert an if-then-else construct to a switch construct.

// Before
if (obj is string s)
{
  Console.WriteLine("obj is a string: " + s);
}

else if (obj is int i && i > 10)
{
  Console.WriteLine("obj is an int greater than 10");
}

// Convert to switch

// After
switch (obj)
{
  case string s:
    Console.WriteLine("Obj is a string: " + s);
    break;
  case int i when i > 10:
    Console.WriteLine("obj is an int greater than 10");
    break;
}
' Before
If TypeOf obj Is String s Then
    Console.WriteLine("obj is a string: " + s)
Else If TypeOf obj Is Integer i And i > 10 Then
    Console.WriteLine("obj is an int greater than 10")
End If

' Convert to switch

' After
Select Case obj
  Case String s
    Console.WriteLine("Obj is a string: " + s)
    Exit Sub
  Case Integer i when i > 10
    Console.WriteLine("obj is an int greater than 10")
    Exit Sub
End Select

挿入文字列に変換するConvert to interpolated string

該当言語Applicable Languages サポートされているバージョンSupported Version
C# 6.0+ および Visual Basic 14+C# 6.0+ and Visual Basic 14+ Visual Studio 2017 RTWVisual Studio 2017 RTW

挿入文字列は、埋め込み変数を含む文字列を表現する簡単な方法であり、String.Format メソッドに似ています。Interpolated strings are an easy way to express strings with embedded variables, similar to the String.Format method. このクイック アクションは、文字列が連結されている場合、または String.Format が使われている場合を認識し、それを挿入文字列に変更します。This Quick Action recognizes cases where strings are concatenated, or using String.Format, and changes the usage to an interpolated string.

// Before
int num = 3;
string s = string.Format("My string with {0} in the middle", num);

// Convert to interpolated string

// After
int num = 3;
string s = $"My string with {num} in the middle";
' Before
Dim num as Integer = 3
Dim s as String = String.Format("My string with {0} in the middle", num)

' Convert to interpolated string

' After
Dim num as Integer = 3
Dim s As String = $"My string with {num} in the middle"

オブジェクト初期化子を使用するUse object initializers

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0017IDE0017 C# および Visual BasicC# and Visual Basic Visual Studio 2017 RTWVisual Studio 2017 RTW

このクイック アクションでは、コンストラクターを呼び出して代入ステートメントの行を追加するのでなく、オブジェクト初期化子を使用することができます。This Quick Action enables you to use object initializers rather than invoking tne constructor and having additional lines of assignment statements.

// Before
var c = new Customer();
c.Age = 21;

// Object initialization can be simplified

// After
var c = new Customer() { Age = 21 };
' Before
Dim c = New Customer()
c.Age = 21

' Object initialization can be simplified

' After
Dim c = New Customer() With {.Age = 21}

コレクション初期化子を使用するUse collection initializers

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0028IDE0028 C# および Visual BasicC# and Visual Basic Visual Studio 2017 RTWVisual Studio 2017 RTW

このクイック アクションでは、クラスの Add メソッドを複数回呼び出すのではなく、コレクション初期化子を使用することができます。This Quick Action lets you use collection initializers rather than multiple calls to the Add method of your class.

// Before
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);

// Collection initialization can be simplified

// After
var list = new List<int> { 1, 2, 3 };
' Before
Dim list = New List(Of Integer)
list.Add(1)
list.Add(2)
list.Add(3)

' Collection initialization can be simplified

' After
Dim list = New List(Of Integer) From {1, 2, 3}

自動プロパティを完全なプロパティに変換するConvert auto property to full property

該当言語Applicable Languages サポートされているバージョンSupported Version
C# および Visual BasicC# and Visual Basic Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5

このクイック アクションでは、自動プロパティから完全なプロパティへの変換、またはその逆の変換を行うことができます。This Quick Action enables you to convert an auto property to a full property, and vice versa.

// Before
private int MyProperty { get; set; }

// Convert to full property

// After
private int MyProperty
{
    get { return _myProperty; }
    set { _myProperty = value; } 
}
' Before
Public Property Name As String

' Convert to full property

' After
Private _Name As String

Public Property Name As String
    Get
        Return _Name
    End Get
    Set
        _Name = Value
    End Set
End Property

ブロック本体を式のようなメンバーに変換するConvert block body to expression-bodied member

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0021-27IDE0021-27 C# 6.0+C# 6.0+ Visual Studio 2017 RTWVisual Studio 2017 RTW

このクイック アクションではブロック本体を、メソッド、コンストラクター、演算子、プロパティ、インデクサー、およびアクセサー用の式のようなメンバーに変換します。This Quick Action allows you to convert block bodies into expression-bodied members for methods, constructors, operators, properties, indexers, and accessors.

//Before
class MyClass4
{
    private int _myProperty;

    public int MyProperty
    {
        get { return _myProperty; }
        set
        {
            _myProperty = value;
        }
    }

    public MyClass4(int myProperty)
    {
        MyProperty = myProperty;
    }

    public void PrintProperty()
    {
        Console.WriteLine(MyProperty);
    }
}

// Use expression body for accessors/constructors/methods

// After
class MyClass4
{
    private int _myProperty;

    public int MyProperty
    {
        get => _myProperty;
        set => _myProperty = value;
    }

    public MyClass4(int myProperty) => MyProperty = myProperty;

    public void PrintProperty() => Console.WriteLine(MyProperty);
}

匿名関数をローカル関数に変換するConvert anonymous function to local function

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0039IDE0039 C# 7.0+C# 7.0+ Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5

このクイック アクションは、匿名関数をローカル関数に変換します。This Quick Action converts anonymous functions into local functions.

// Before
Func<int, int> fibonacci = null;
fibonacci = (int n) =>
{
    return n <= 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2);
};

// Use local function

// After
int fibonacci(int n)
{
    return n <= 1 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}

ReferenceEqualsis null に変換するConvert ReferenceEquals to is null

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0041IDE0041 C# 7.0+C# 7.0+ Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5

このクイック アクションでは、可能な限り、ReferenceEquals コーディング パターンではなく、パターン マッチングの使用を提案します。This Quick Action suggests the use of pattern matching rather than the ReferenceEquals coding-pattern, where possible.

// Before
var value = "someString";
if (object.ReferenceEquals(value, null))
{
    return;
}

// Use 'is null' check

// After
var value = "someString";
if (value is null)
{
    return;
}

パターン マッチングを導入するIntroduce pattern matching

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0020IDE0020 C# 7.0+C# 7.0+ Visual Studio 2017 RTWVisual Studio 2017 RTW
IDE0019IDE0019 C# 7.0+C# 7.0+ Visual Studio 2017 RTWVisual Studio 2017 RTW

このクイック アクションでは、C# におけるキャストおよび null チェックで、パターン マッチングの使用を提案します。This Quick Action suggests the use of pattern matching with casts and null checks in C#.

// Before
if (o is int) 
{
    var i = (int)o; 
    ... 
}

// Use pattern matching

// After
if (o is int i) 
{
    ...
}
// Before
var s = o as string;
if (s != null) 
{
    ...
}

// Use pattern matching

// After
if (o is string s) 
{
    ...
}

数値リテラルの基本を変更するChange base for numeric literals

該当言語Applicable Languages サポートされているバージョンSupported Version
C# 7.0+ および Visual Basic 14+C# 7.0+ and Visual Basic 14+ Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションでは、数値リテラルの基本数値システムを別のものに変換できます。This Quick Action enables you to convert a numeric literal from one base numeric system to another. たとえば、数値を 16 進数からバイナリ形式に変更できます。For example, you can change a number to hexadecimal or to binary format.

// Before
int countdown = 2097152;

// Convert to hex

// After
int countdown = 0x200000;
' Before
Dim countdown As Integer = 2097152

' Convert to hex

' After
Dim countdown As Integer = &H200000

リテラルに桁区切り記号を挿入するInsert digit separators into literals

該当言語Applicable Languages サポートされているバージョンSupported Version
C# 7.0+ および Visual Basic 14+C# 7.0+ and Visual Basic 14+ Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3

このクイック アクションでは、区切り文字をリテラル値に追加することができます。This Quick Action enables you to add separator characters into literal values.

// Before
int countdown = 1000000;

// Separate thousands

// After
int countdown = 1_000_000;
' Before
Dim countdown As Integer = 1000000

' Separate thousands

' After
Dim countdown As Integer = 1_000_000

明示的なタプル名を使用するUse explicit tuple names

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0033IDE0033 C# 7.0+ および Visual Basic 15+C# 7.0+ and Visual Basic 15+ Visual Studio 2017 RTWVisual Studio 2017 RTW

このクイック アクションでは、Item1、Item2 などのタプル名ではなく、明示的なタプル名を使用できる領域を識別します。This Quick Action identifies areas where the explicit tuple name can be used rather than Item1, Item2, etc.

// Before
(string name, int age) customer = GetCustomer();
var name = customer.Item1;

// Use explicit tuple name

// After
(string name, int age) customer = GetCustomer();
var name = customer.name;
' Before
Dim customer As (name As String, age As Integer) = GetCustomer()
Dim name = customer.Item1

' Use explicit tuple name

' After
Dim customer As (name As String, age As Integer) = GetCustomer()
Dim name = customer.name

推論による名前を使用するUse inferred names

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0037IDE0037 C#C# Visual Studio 2017 v.Visual Studio 2017 v. 15.515.5
IDE0037IDE0037 C# 7.1+C# 7.1+ Visual Studio 2017 v.Visual Studio 2017 v. 15.515.5

これらクイック アクションでは、匿名型の推論によるメンバー名を使用、または C# 7.1 の推論によるタプル要素名を使用できるタイミングを指摘します。These Quick Actions point out when users can use inferred member names in anonymous types or use C# 7.1's inferred tuple element names.

// Before
var anon = new { age = age, name = name };

// Use inferred member name

// After
var anon = new { age, name };
// Before
var tuple = (age: age, name: name);

// Use inferred tuple element name

// After
var tuple = (age, name);

タプル宣言を分解するDeconstruct tuple declaration

診断 IDDiagnostic ID 該当言語Applicable Languages サポートされているバージョンSupported Version
IDE0042IDE0042 C# 7.0+C# 7.0+ Visual Studio 2017 v.Visual Studio 2017 v. 15.515.5

このクイック アクションでは、タプル変数宣言を分解することができます。This Quick Action enables you to deconstruct tuple variable declarations.

// Before
var person = GetPersonTuple();
Console.WriteLine($"{person.name} {person.age}");

(int x, int y) point = GetPointTuple();
Console.WriteLine($"{point.x} {point.y}");

//Deconstruct variable declaration

// After
var (name, age) = GetPersonTuple();
Console.WriteLine($"{name} {age}");

(int x, int y) = GetPointTuple();
Console.WriteLine($"{x} {y}");

関連項目See Also