JetBrains Rider 2020.2 Help

Convert Method to Indexer refactoring

This refactoring helps you convert methods that access collections into indexers and update method usages accordingly. You can apply it to:

  • A method with return value and one or more parameters to convert it into the get accessor of an indexer with the same set of parameters.

  • A method with void return type and two or more parameters (the last of which is expected to be a value and the others represent the index) to convert it into the set accessor of an indexer.

Consider the following example. If no indexer exists, the refactoring will create it:

class TestBookLibrary { Book[] _books; Book GetBookAt(int index) { return _books[index]; } void Insert(int index, Book book) { _books[index] = book; } void Copy(int copy, int to) { Insert(to, GetBookAt(copy)); } }
class TestBookLibrary { Book[] _books; Book this[int index] { get { return _books[index]; } } void Insert(int index, Book book) { _books[index] = book; } void Copy(int copy, int to) { Insert(to, this[copy]); } }

If an indexer with only one of the accessors exists, the refactoring will try to add the second accessor if the converted method fits:

class TestBookLibrary { Book[] _books; Book this[int index] { get { return _books[index]; } } void Insert(int index, Book book) { _books[index] = book; } void Copy(int copy, int to) { Insert(to, this[copy]); } }
class TestBookLibrary { Book[] _books; Book this[int index] { get { return _books[index]; } set { _books[index] = value; } } void Copy(int copy, int to) { this[to] = this[copy]; } }

Convert a method into an indexer

  1. Place the caret at the declaration or a usage of a method in the editor, or select it in the Structure window.

  2. Do one of the following:

    • Press Ctrl+Alt+Shift+T and then choose Convert Method to Indexer

    • Choose Refactor | Convert Method to Indexer in the main menu.

  3. If no conflicts are found, JetBrains Rider performs the refactoring immediately. Otherwise, it prompts you to resolve conflicts.

Last modified: 03 September 2020