Multi-parameter indexers let you access data using more than one key, like looking up a value by row and column in a table.
Multi-parameter indexers in C Sharp (C#)
public returnType this[type1 index1, type2 index2] { get { /* return value based on index1 and index2 */ } set { /* set value based on index1 and index2 */ } }
The keyword this defines the indexer.
You can use any number of parameters separated by commas inside the square brackets.
public int this[int row, int col] { get { return matrix[row, col]; } set { matrix[row, col] = value; } }
public string this[string firstName, string lastName] { get { return FindPerson(firstName, lastName); } }
This program creates a 3x3 table and sets values at two positions using the multi-parameter indexer. Then it prints those values.
using System; class Table { private int[,] data = new int[3, 3]; public int this[int row, int col] { get { return data[row, col]; } set { data[row, col] = value; } } } class Program { static void Main() { Table table = new Table(); table[0, 0] = 10; table[1, 2] = 20; Console.WriteLine(table[0, 0]); Console.WriteLine(table[1, 2]); } }
Multi-parameter indexers make your class easier to use when working with multi-key data.
Indexers can have only get, only set, or both get and set accessors.
Be careful with index bounds to avoid runtime errors.
Multi-parameter indexers let you use more than one key to access data.
They make classes behave like multi-dimensional arrays or tables.
Use them to simplify code that needs multiple keys to find values.
Practice
Solution
Step 1: Understand what an indexer does
An indexer lets you access elements in a class like an array using keys.Step 2: Identify the role of multiple parameters
Multi-parameter indexers allow using more than one key, like row and column in a table.Final Answer:
To allow accessing elements using multiple keys like a table or matrix. -> Option AQuick Check:
Multi-parameter indexer = multiple keys access [OK]
- Confusing indexers with methods returning multiple values
- Thinking indexers define constructors
- Mixing indexers with operator overloading
Solution
Step 1: Recall indexer syntax
Indexers use the keywordthisfollowed by square brackets with parameters separated by commas.Step 2: Check each option
public int this[int x, int y] { get { return 0; } set { } } uses square brackets with comma-separated parameters, which is correct syntax.Final Answer:
public int this[int x, int y] { get { return 0; } set { } } -> Option DQuick Check:
Indexer syntax uses square brackets with commas [OK]
- Using parentheses instead of square brackets
- Separating parameters with semicolons
- Trying to nest square brackets for parameters
class Matrix {
private int[,] data = new int[2,2] {{1,2},{3,4}};
public int this[int x, int y] {
get { return data[x, y]; }
set { data[x, y] = value; }
}
}
var m = new Matrix();
Console.WriteLine(m[1, 0]);Solution
Step 1: Understand the data array
The 2D arraydatais {{1,2},{3,4}}. The first index is row, second is column.Step 2: Access element at m[1, 0]
Row 1, column 0 is the second row, first column, which is 3.Final Answer:
3 -> Option CQuick Check:
m[1,0] = 3 [OK]
- Mixing row and column indices
- Confusing array initialization syntax
- Assuming zero-based indexing is off
public class Table {
private string[,] data = new string[3,3];
public string this[int x; int y] {
get { return data[x, y]; }
set { data[x, y] = value; }
}
}Solution
Step 1: Check parameter separator in indexer
Parameters in indexers must be separated by commas, not semicolons.Step 2: Verify other parts
Return type is present, data array can be multi-dimensional, indexers are instance members by default.Final Answer:
Using semicolon instead of comma between parameters in indexer. -> Option BQuick Check:
Parameters separated by commas, not semicolons [OK]
- Using semicolons instead of commas
- Thinking indexers must be static
- Confusing array dimensions with indexer parameters
Solution
Step 1: Understand the data structure needed
We need a dictionary with a tuple key (student, subject) to store grades.Step 2: Check indexer syntax and dictionary usage
public class Grades { private Dictionary<(string, string), int> data = new(); public int this[string student, string subject] { get => data[(student, subject)]; set => data[(student, subject)] = value; } } uses a tuple key dictionary and correct indexer syntax with comma-separated parameters.Step 3: Identify errors in other options
public class Grades { private Dictionary data = new(); public int this[string student, string subject] { get => data[student + subject]; set => data[student + subject] = value; } } concatenates keys as string which can cause collisions; C uses only one parameter; D uses semicolon instead of comma in indexer.Final Answer:
public class Grades { private Dictionary<(string, string), int> data = new(); public int this[string student, string subject] { get => data[(student, subject)]; set => data[(student, subject)] = value; } } -> Option AQuick Check:
Tuple keys + comma-separated indexer = correct [OK]
- Concatenating keys as strings causing collisions
- Using semicolons instead of commas in indexer
- Using single-parameter indexer for multi-key data
Ready to prove it?
Pass the test and this pattern moves unknown
