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

Multiple generic parameters in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Generic Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of generic class with two type parameters
What is the output of the following C# program?
C Sharp (C#)
using System;

class Pair<T, U>
{
    public T First { get; set; }
    public U Second { get; set; }

    public Pair(T first, U second)
    {
        First = first;
        Second = second;
    }

    public void Print()
    {
        Console.WriteLine($"{First} and {Second}");
    }
}

class Program
{
    static void Main()
    {
        var pair = new Pair<int, string>(5, "hello");
        pair.Print();
    }
}
A5 and hello
Bhello and 5
C5hello
DCompilation error
Attempts:
2 left
💡 Hint
Look at how the generic parameters are used and printed in the Print method.
❓ Predict Output
intermediate
2:00remaining
Output of generic method with two parameters
What is the output of this C# program?
C Sharp (C#)
using System;

class Utils
{
    public static void Swap<T, U>(ref T a, ref U b)
    {
        Console.WriteLine($"Swapping {a} and {b}");
    }
}

class Program
{
    static void Main()
    {
        int x = 10;
        string y = "test";
        Utils.Swap(ref x, ref y);
    }
}
ASwapping 10 and test
BSwapping test and 10
CCompilation error due to different types
DRuntime error
Attempts:
2 left
💡 Hint
Generic methods can have multiple type parameters and can accept different types.
🔧 Debug
advanced
2:00remaining
Identify the error in generic class instantiation
What error does the following code produce?
C Sharp (C#)
class Container<T, U>
{
    public T Item1;
    public U Item2;
}

class Program
{
    static void Main()
    {
        Container<int> c = new Container<int, string>();
    }
}
ACS0029: Cannot implicitly convert type 'Container<int, string>' to 'Container<int>'
BCS0311: The type arguments for method cannot be inferred
CNo error, compiles successfully
DCS0305: Using the generic type 'Container<T, U>' requires 2 type arguments
Attempts:
2 left
💡 Hint
Check how many generic parameters the class Container expects.
📝 Syntax
advanced
2:00remaining
Which option correctly declares a generic class with two parameters?
Select the correct syntax to declare a generic class with two type parameters T and U.
Aclass MyClass<T U> { }
Bclass MyClass<T; U> { }
Cclass MyClass<T, U> { }
Dclass MyClass<T> U { }
Attempts:
2 left
💡 Hint
Generic parameters are separated by commas inside angle brackets.
🚀 Application
expert
2:00remaining
Determine the number of items in a generic dictionary
Given the following code, how many items are in the dictionary after execution?
C Sharp (C#)
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<int, string> dict = new Dictionary<int, string>();
        dict.Add(1, "one");
        dict.Add(2, "two");
        dict[3] = "three";
        dict[2] = "deux";
    }
}
A4
B3
C2
DCompilation error
Attempts:
2 left
💡 Hint
Adding a key that already exists updates its value, not adds a new item.

Practice

(1/5)
1.

What is the correct way to declare a generic class with two type parameters in C#?

class MyClass<T1, T2> { }
easy
A. class MyClass<T1> { }
B. class MyClass<T1, T2> { }
C. class MyClass<T1; T2> { }
D. class MyClass<T1 T2> { }

Solution

  1. Step 1: Understand generic class syntax

    In C#, multiple generic parameters are separated by commas inside angle brackets <>.
  2. Step 2: Check each option's syntax

    class MyClass<T1, T2> { } correctly uses a comma between T1 and T2. Other options use a single parameter, semicolon, or space which are incorrect.
  3. Final Answer:

    class MyClass<T1, T2> { } -> Option B
  4. Quick Check:

    Multiple generic parameters use commas inside <> [OK]
Hint: Separate generic types with commas inside angle brackets [OK]
Common Mistakes:
  • Using semicolons or spaces instead of commas
  • Forgetting to separate multiple generic parameters
  • Declaring only one generic parameter when two are needed
2.

Which of the following is the correct syntax to declare a method with two generic parameters in C#?

public void Swap<T1, T2>(T1 a, T2 b) { }
easy
A. public void Swap<T1 T2>(T1 a, T2 b) { }
B. public void Swap<T1; T2>(T1 a, T2 b) { }
C. public void Swap<T1, T2>(T1 a, T2 b) { }
D. public void Swap(T1 a, T2 b) { }

Solution

  1. Step 1: Recall method generic parameter syntax

    Generic parameters for methods are declared inside angle brackets <> separated by commas.
  2. Step 2: Evaluate each option

    public void Swap<T1, T2>(T1 a, T2 b) { } correctly uses commas between T1 and T2. Other options use invalid separators like space or semicolon, or miss the generic parameters entirely.
  3. Final Answer:

    public void Swap<T1, T2>(T1 a, T2 b) { } -> Option C
  4. Quick Check:

    Method generics need commas inside <> [OK]
Hint: Use commas to separate generic parameters in method declarations [OK]
Common Mistakes:
  • Omitting generic parameters in method signature
  • Using spaces or semicolons instead of commas
  • Placing generic parameters outside angle brackets
3.

What will be the output of the following C# code?

class Pair<T1, T2> {
    public T1 First;
    public T2 Second;
    public Pair(T1 first, T2 second) {
        First = first;
        Second = second;
    }
    public override string ToString() {
        return $"{First} and {Second}";
    }
}

var p = new Pair<int, string>(5, "hello");
Console.WriteLine(p);
medium
A. 5, hello
B. Pair`2
C. System.Pair
D. 5 and hello

Solution

  1. Step 1: Understand the Pair class and ToString override

    The Pair class stores two values and overrides ToString to return "{First} and {Second}".
  2. Step 2: Analyze the instantiation and output

    We create Pair<int, string> with 5 and "hello". Console.WriteLine calls ToString, so output is "5 and hello".
  3. Final Answer:

    5 and hello -> Option D
  4. Quick Check:

    ToString returns "{First} and {Second}" [OK]
Hint: Check ToString override for output format [OK]
Common Mistakes:
  • Assuming default ToString output for generic class
  • Confusing comma with 'and' in output
  • Ignoring ToString override
4.

Identify the error in the following code snippet:

class Container<T1, T2> {
    public T1 Item1;
    public T2 Item2;
    public Container(T1 item1, T2 item2) {
        Item1 = item1;
        Item2 = item2;
    }
}

var c = new Container<int>(5, 10);
medium
A. Missing second generic type argument when creating Container instance
B. Constructor parameters types do not match generic types
C. Cannot use int as generic type
D. Missing semicolon after class declaration

Solution

  1. Step 1: Check generic parameters in class and instance

    The class Container requires two generic types: T1 and T2.
  2. Step 2: Analyze the instance creation

    The code uses Container<int> with only one generic argument, but two are required.
  3. Final Answer:

    Missing second generic type argument when creating Container instance -> Option A
  4. Quick Check:

    Two generic parameters require two type arguments [OK]
Hint: Match number of generic arguments with parameters [OK]
Common Mistakes:
  • Providing fewer generic arguments than declared
  • Assuming default generic types
  • Ignoring compiler errors about generic arguments
5.

Given the following generic method, what is the correct way to call it with two different types?

public static void PrintPair<T1, T2>(T1 first, T2 second) {
    Console.WriteLine($"First: {first}, Second: {second}");
}

Choose the correct call:

hard
A. PrintPair<int, string>(10, "test");
B. PrintPair<int>(10, "test");
C. PrintPair<T1, T2>(10, "test");
D. PrintPair<string, int>(10, "test");

Solution

  1. Step 1: Understand generic method call syntax

    When calling a generic method with multiple parameters, specify all types inside <> in order.
  2. Step 2: Match types with arguments

    The method expects T1 then T2. PrintPair<int, string>(10, "test"); uses <int, string> matching arguments 10 (int) and "test" (string). PrintPair<string, int>(10, "test"); reverses types incorrectly.
  3. Final Answer:

    PrintPair<int, string>(10, "test"); -> Option A
  4. Quick Check:

    Generic method call types match argument order [OK]
Hint: Specify all generic types in order when calling method [OK]
Common Mistakes:
  • Providing fewer generic types than parameters
  • Reversing generic types order
  • Omitting generic types when required
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