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

Indexer declaration in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Indexer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this indexer usage?

Consider the following C# class with an indexer. What will be printed when the program runs?

C Sharp (C#)
using System;

class Sample {
    private string[] data = {"zero", "one", "two"};
    public string this[int index] {
        get { return data[index]; }
        set { data[index] = value; }
    }
}

class Program {
    static void Main() {
        Sample s = new Sample();
        s[1] = "ONE";
        Console.WriteLine(s[1]);
    }
}
Atwo
Bone
Czero
DONE
Attempts:
2 left
💡 Hint

Think about what happens when you assign a new value to s[1].

❓ Predict Output
intermediate
2:00remaining
What error does this indexer code produce?

What error will this C# code produce when compiled?

C Sharp (C#)
class Test {
    private int[] values = new int[3];
    public int this[int index] {
        get { return values[index]; }
        // Missing set accessor
    }
}

class Program {
    static void Main() {
        Test t = new Test();
        t[0] = 10;
    }
}
ACompile-time error: Property or indexer cannot be assigned to -- it is read only
BRuntime error: Index out of range
CNo error, outputs 10
DCompile-time error: Missing get accessor
Attempts:
2 left
💡 Hint

Check if the indexer allows setting a value.

🔧 Debug
advanced
2:00remaining
Why does this indexer code cause a runtime error?

Examine the code below. Why does it throw an exception at runtime?

C Sharp (C#)
class Container {
    private int[] arr = new int[2];
    public int this[int index] {
        get {
            if (index < 0 || index >= arr.Length) throw new System.IndexOutOfRangeException();
            return arr[index];
        }
        set {
            arr[index] = value;
        }
    }
}

class Program {
    static void Main() {
        Container c = new Container();
        c[2] = 5;
    }
}
ABecause the get accessor throws an exception for index 2
BBecause the set accessor does not check index bounds before assignment
CBecause the array size is zero
DBecause the indexer is missing a set accessor
Attempts:
2 left
💡 Hint

Look at how the set accessor handles the index.

📝 Syntax
advanced
2:00remaining
Which option correctly declares a string indexer?

Which of the following C# indexer declarations is syntactically correct for indexing by a string key?

Apublic string this(key string) { get { return dict[key]; } set { dict[key] = value; } }
Bpublic string this[string key] get { return dict[key]; } set { dict[key] = value; }
Cpublic string this[string key] { get { return dict[key]; } set { dict[key] = value; } }
Dpublic string this[string key] => dict[key];
Attempts:
2 left
💡 Hint

Remember the syntax for indexers uses square brackets and braces.

🚀 Application
expert
3:00remaining
What is the output of this complex indexer example?

Given the following C# code, what will be printed?

C Sharp (C#)
using System;
using System.Collections.Generic;

class MultiIndexer {
    private Dictionary<(int, int), string> data = new();

    public string this[int x, int y] {
        get => data.TryGetValue((x, y), out var val) ? val : "none";
        set => data[(x, y)] = value;
    }
}

class Program {
    static void Main() {
        MultiIndexer mi = new MultiIndexer();
        mi[1, 2] = "A";
        mi[3, 4] = "B";
        Console.WriteLine(mi[1, 2]);
        Console.WriteLine(mi[2, 3]);
    }
}
A
A
none
B
none
none
C
A
B
D
B
none
Attempts:
2 left
💡 Hint

Check which keys are set and which are not.

Practice

(1/5)
1. What is the purpose of an indexer in a C# class?
easy
A. To declare a constant value inside the class
B. To allow objects to be accessed like arrays using square brackets
C. To create a new class instance
D. To define a method that returns the class name

Solution

  1. Step 1: Understand what an indexer does

    An indexer lets you access elements in an object using square brackets, similar to arrays.
  2. Step 2: Compare options with this definition

    Only To allow objects to be accessed like arrays using square brackets describes this behavior correctly.
  3. Final Answer:

    To allow objects to be accessed like arrays using square brackets -> Option B
  4. Quick Check:

    Indexer = access with [] [OK]
Hint: Indexers let objects act like arrays with [] access [OK]
Common Mistakes:
  • Confusing indexers with methods
  • Thinking indexers create new objects
  • Mixing indexers with constants
2. Which of the following is the correct syntax to declare an indexer in C#?
easy
A. public int this[int index] get set;
B. public int indexer(int index) { get; set; }
C. public int this[index] { get; set; }
D. public int this[int index] { get; set; }

Solution

  1. Step 1: Recall indexer syntax

    An indexer uses the keyword this with a parameter list in square brackets and defines get and/or set accessors inside braces.
  2. Step 2: Check each option

    public int this[int index] { get; set; } matches the correct syntax exactly. public int indexer(int index) { get; set; } uses a method-like name, which is incorrect. public int this[index] { get; set; } misses the type in the parameter. public int this[int index] get set; misses braces and semicolons.
  3. Final Answer:

    public int this[int index] { get; set; } -> Option D
  4. Quick Check:

    Indexer syntax = this[type param] { get; set; } [OK]
Hint: Indexer syntax always uses 'this' with parameter in brackets [OK]
Common Mistakes:
  • Using method name instead of 'this'
  • Omitting parameter type
  • Missing braces around get/set
3. What will be the output of the following code?
class Sample {
  private int[] data = {10, 20, 30};
  public int this[int i] {
    get { return data[i]; }
    set { data[i] = value; }
  }
}

var s = new Sample();
s[1] = 50;
Console.WriteLine(s[1]);
medium
A. 50
B. 20
C. 30
D. Compilation error

Solution

  1. Step 1: Understand the indexer behavior

    The indexer accesses the private array data. Setting s[1] = 50; changes data[1] from 20 to 50.
  2. Step 2: Check the output of Console.WriteLine(s[1])

    This prints the updated value at index 1, which is 50.
  3. Final Answer:

    50 -> Option A
  4. Quick Check:

    Indexer set changes value, output = 50 [OK]
Hint: Indexer set changes array value, get returns updated value [OK]
Common Mistakes:
  • Assuming original value prints
  • Confusing indexer with method call
  • Expecting compilation error
4. Identify the error in this indexer declaration:
public string this[int index]
{
  get { return data[index]; }
  set data[index] = value;
}
medium
A. Parameter name cannot be 'index'
B. Indexer must return int, not string
C. Missing braces around set accessor body
D. Missing semicolon after get accessor

Solution

  1. Step 1: Review accessor syntax

    Both get and set accessors must have braces enclosing their bodies.
  2. Step 2: Locate the error

    The set accessor lacks braces around data[index] = value;, causing a syntax error.
  3. Final Answer:

    Missing braces around set accessor body -> Option C
  4. Quick Check:

    Accessor bodies need braces { } [OK]
Hint: Always use braces { } for get and set bodies [OK]
Common Mistakes:
  • Omitting braces in set accessor
  • Wrong return type assumption
  • Thinking parameter name is restricted
5. You want to create a class that stores names and allows access by index using an indexer. Which of the following indexer declarations correctly supports both reading and writing names by index?
hard
A. public string this[int i] { get { return names[i]; } set { names[i] = value; } }
B. public string this[int i] { set { names[i] = value; } }
C. public string this[int i] { get { return names[i]; } }
D. public string this[string name] { get { return name; } set { name = value; } }

Solution

  1. Step 1: Understand requirements for read/write access

    The indexer must have both get and set accessors to allow reading and writing by index.
  2. Step 2: Evaluate each option

    public string this[int i] { get { return names[i]; } } only has get, so no writing. public string this[int i] { set { names[i] = value; } } only has set, so no reading. public string this[int i] { get { return names[i]; } set { names[i] = value; } } has both get and set with int index parameter, which is correct. public string this[string name] { get { return name; } set { name = value; } } uses a string parameter, which does not match the requirement to access by index.
  3. Final Answer:

    public string this[int i] { get { return names[i]; } set { names[i] = value; } } -> Option A
  4. Quick Check:

    Read/write indexer needs both get and set [OK]
Hint: Read/write indexers need both get and set accessors [OK]
Common Mistakes:
  • Defining only get or only set
  • Using wrong parameter type
  • Confusing indexer parameter with property
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