Bird
Raised Fist0
C Sharp (C#)programming~20 mins

Multi-parameter indexers in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Multi-parameter Indexer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of multi-parameter indexer access
What is the output of the following C# code using a multi-parameter indexer?
C Sharp (C#)
class Matrix {
    private int[,] data = new int[2, 2] { {1, 2}, {3, 4} };
    public int this[int row, int col] {
        get { return data[row, col]; }
        set { data[row, col] = value; }
    }
}

var m = new Matrix();
Console.WriteLine(m[1, 0]);
A2
B4
C1
D3
Attempts:
2 left
💡 Hint
Remember that the first index is the row and the second is the column.
🧠 Conceptual
intermediate
2:00remaining
Understanding multi-parameter indexer syntax
Which of the following correctly declares a multi-parameter indexer in C# that takes two integers and returns a string?
Apublic string this[int x, int y] { get { return ""; } }
Bpublic string this[int x; int y] { get { return ""; } }
Cpublic string this[int x][int y] { get { return ""; } }
Dpublic string this(int x, int y) { get { return ""; } }
Attempts:
2 left
💡 Hint
Indexers use square brackets with comma-separated parameters.
🔧 Debug
advanced
2:00remaining
Identify the error in multi-parameter indexer implementation
What error will the following code produce?
C Sharp (C#)
class Grid {
    private int[,] values = new int[3,3];
    public int this[int x, int y] {
        get { return values[x]; }
        set { values[x, y] = value; }
    }
}
ANo error, code compiles and runs
BRuntime IndexOutOfRangeException
CCompile-time error: Cannot convert int[] to int
DCompile-time error: Missing set accessor
Attempts:
2 left
💡 Hint
Check the getter's return statement and the type of values.
❓ Predict Output
advanced
2:00remaining
Output of multi-parameter indexer with set and get
What will be printed after running this code?
C Sharp (C#)
class Table {
    private string[,] data = new string[2, 2];
    public string this[int r, int c] {
        get => data[r, c];
        set => data[r, c] = value.ToUpper();
    }
}

var t = new Table();
t[0, 1] = "hello";
Console.WriteLine(t[0, 1]);
Ahello
BHELLO
CHello
Dnull
Attempts:
2 left
💡 Hint
Look at how the setter modifies the value before storing.
🧠 Conceptual
expert
2:00remaining
Behavior of multi-parameter indexers with different parameter types
Given the following indexer declaration, which statement is true about its usage? public int this[string key, int index] { get { return index + key.Length; } }
AYou can access it like obj["abc", 2] and it returns 5
BYou must pass two strings as parameters
CIt only accepts integer parameters
DIt cannot be used because indexers require parameters of the same type
Attempts:
2 left
💡 Hint
Check the parameter types and how the indexer is accessed.

Practice

(1/5)
1. What is the main purpose of a multi-parameter indexer in C#?
easy
A. To allow accessing elements using multiple keys like a table or matrix.
B. To create a method that returns multiple values.
C. To define multiple constructors in a class.
D. To overload operators for custom classes.

Solution

  1. Step 1: Understand what an indexer does

    An indexer lets you access elements in a class like an array using keys.
  2. Step 2: Identify the role of multiple parameters

    Multi-parameter indexers allow using more than one key, like row and column in a table.
  3. Final Answer:

    To allow accessing elements using multiple keys like a table or matrix. -> Option A
  4. Quick Check:

    Multi-parameter indexer = multiple keys access [OK]
Hint: Think of multi-parameter indexers as multi-key access [OK]
Common Mistakes:
  • Confusing indexers with methods returning multiple values
  • Thinking indexers define constructors
  • Mixing indexers with operator overloading
2. Which of the following is the correct syntax to declare a multi-parameter indexer in C#?
easy
A. public int this[int x; int y] { get { return 0; } set { } }
B. public int this(int x, int y) { get { return 0; } set { } }
C. public int this[int x][int y] { get { return 0; } set { } }
D. public int this[int x, int y] { get { return 0; } set { } }

Solution

  1. Step 1: Recall indexer syntax

    Indexers use the keyword this followed by square brackets with parameters separated by commas.
  2. 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.
  3. Final Answer:

    public int this[int x, int y] { get { return 0; } set { } } -> Option D
  4. Quick Check:

    Indexer syntax uses square brackets with commas [OK]
Hint: Use square brackets with commas for multiple parameters [OK]
Common Mistakes:
  • Using parentheses instead of square brackets
  • Separating parameters with semicolons
  • Trying to nest square brackets for parameters
3. What will be the output of this code snippet?
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]);
medium
A. 4
B. 2
C. 3
D. 1

Solution

  1. Step 1: Understand the data array

    The 2D array data is {{1,2},{3,4}}. The first index is row, second is column.
  2. Step 2: Access element at m[1, 0]

    Row 1, column 0 is the second row, first column, which is 3.
  3. Final Answer:

    3 -> Option C
  4. Quick Check:

    m[1,0] = 3 [OK]
Hint: Remember: first index = row, second = column [OK]
Common Mistakes:
  • Mixing row and column indices
  • Confusing array initialization syntax
  • Assuming zero-based indexing is off
4. Identify the error in this multi-parameter indexer declaration:
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; }
  }
}
medium
A. Missing return type for the indexer.
B. Using semicolon instead of comma between parameters in indexer.
C. Data array should be one-dimensional for indexers.
D. Indexer must be static.

Solution

  1. Step 1: Check parameter separator in indexer

    Parameters in indexers must be separated by commas, not semicolons.
  2. Step 2: Verify other parts

    Return type is present, data array can be multi-dimensional, indexers are instance members by default.
  3. Final Answer:

    Using semicolon instead of comma between parameters in indexer. -> Option B
  4. Quick Check:

    Parameters separated by commas, not semicolons [OK]
Hint: Separate indexer parameters with commas, not semicolons [OK]
Common Mistakes:
  • Using semicolons instead of commas
  • Thinking indexers must be static
  • Confusing array dimensions with indexer parameters
5. You want to create a class that stores grades for students in different subjects using a multi-parameter indexer. Which implementation correctly allows setting and getting grades by student name and subject?
hard
A. 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; } }
B. public class Grades { private Dictionary data = new(); public int this[string student, string subject] { get => data[student + subject]; set => data[student + subject] = value; } }
C. public class Grades { private Dictionary data = new(); public int this[string student] { get => data[student]; set => data[student] = value; } }
D. 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; } }

Solution

  1. Step 1: Understand the data structure needed

    We need a dictionary with a tuple key (student, subject) to store grades.
  2. 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.
  3. 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.
  4. 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 A
  5. Quick Check:

    Tuple keys + comma-separated indexer = correct [OK]
Hint: Use tuple keys and commas in indexer parameters [OK]
Common Mistakes:
  • Concatenating keys as strings causing collisions
  • Using semicolons instead of commas in indexer
  • Using single-parameter indexer for multi-key data
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard