📖 Scenario: You are building a simple calculator program that can perform different operations on numbers. You want to use a Func delegate to hold the operation logic and apply it to numbers.
🎯 Goal: Create a program that uses a Func<int, int, int> delegate to perform addition or multiplication on two numbers.
📋 What You'll Learn
Create a Func<int, int, int> delegate variable named operation
Assign a lambda expression for addition to operation
Change operation to a lambda expression for multiplication
Invoke operation with two integers and print the result
💡 Why This Matters
🌍 Real World
Using <code>Func</code> delegates lets you pass around blocks of code as variables. This is useful in event handling, callbacks, and functional programming.
💼 Career
Understanding delegates and lambda expressions is important for C# developers working on flexible and reusable code, especially in UI programming and asynchronous tasks.
Progress0 / 4 steps
1
Create a Func delegate for addition
Create a Func<int, int, int> delegate variable called operation and assign it a lambda expression that adds two integers: (a, b) => a + b.
C Sharp (C#)
Hint
Use Func<int, int, int> to declare a delegate that takes two integers and returns an integer. Assign a lambda expression for addition.
2
Change the operation to multiplication
Change the operation delegate to a lambda expression that multiplies two integers: (a, b) => a * b.
C Sharp (C#)
Hint
Assign a new lambda expression to operation that multiplies the two parameters.
3
Invoke the operation delegate
Invoke the operation delegate with the integers 4 and 5, and store the result in an integer variable called result.
C Sharp (C#)
Hint
Call operation like a function with arguments 4 and 5, and save the output in result.
4
Print the result
Print the value of the result variable using Console.WriteLine.
C Sharp (C#)
Hint
Use Console.WriteLine(result); to display the multiplication result.
Practice
(1/5)
1. What is the main purpose of the Func delegate type in C#?
easy
A. To store methods that return a value
B. To store methods that do not return a value
C. To create variables of any data type
D. To define classes
Solution
Step 1: Understand what Func represents
Func is a delegate type designed to hold references to methods that return a value.
Step 2: Differentiate from other delegates
Unlike Action, which stores methods without return values, Func always returns a value.
Final Answer:
To store methods that return a value -> Option A
Quick Check:
Func stores methods with return values = C [OK]
Hint: Remember: Func always returns a value, Action does not [OK]
Common Mistakes:
Confusing Func with Action delegate
Thinking Func can store void methods
Assuming Func defines classes
2. Which of the following is the correct syntax to declare a Func delegate that takes two integers and returns an integer?
easy
A. Func add = (x, y) => x + y;
B. Func add = (x, y) => x + y;
C. Func<int> add = (x, y) => x + y;
D. Func add = (x, y) => x + y;
Solution
Step 1: Understand Func generic parameters
The last type parameter is the return type; previous ones are input types. For two integers input and one integer output, use Func.
The lambda (x, y) => x + y takes two inputs and returns their sum, matching the delegate.
Final Answer:
Func<int, int, int> add = (x, y) => x + y; -> Option B
Quick Check:
Two inputs + one output = Func<int, int, int> [OK]
Hint: Count inputs, last type is output in Func<> [OK]
Common Mistakes:
Using wrong number of generic parameters
Mixing input and output types order
Incorrect lambda parameter count
3. What is the output of the following code?
Func<int, int, int> multiply = (a, b) => a * b;
int result = multiply(3, 4);
Console.WriteLine(result);
medium
A. 12
B. 7
C. 34
D. Error
Solution
Step 1: Understand the Func delegate and lambda
The delegate multiply takes two integers and returns their product.
Step 2: Calculate the result of multiply(3, 4)
3 multiplied by 4 equals 12.
Final Answer:
12 -> Option A
Quick Check:
3 * 4 = 12 [OK]
Hint: Multiply inputs as lambda defines [OK]
Common Mistakes:
Adding instead of multiplying
Concatenating numbers as strings
Expecting syntax error
4. Identify the error in this code snippet:
Func<int, int> square = x => x * x;
int result = square(5, 2);
Console.WriteLine(result);
medium
A. Syntax error in lambda expression
B. Missing return statement in lambda
C. Incorrect delegate type for lambda
D. Too many arguments passed to the Func delegate
Solution
Step 1: Check Func delegate signature
Func<int, int> expects one integer input and returns an integer.
Step 2: Check method call arguments
The call square(5, 2) passes two arguments, but the delegate expects only one.
Final Answer:
Too many arguments passed to the Func delegate -> Option D
Quick Check:
One input expected, two given = error [OK]
Hint: Match argument count to Func input count [OK]
Common Mistakes:
Passing wrong number of arguments
Confusing input and output types
Assuming lambda needs explicit return
5. You want to create a Func delegate that takes a string and returns its length only if the string is not null or empty; otherwise, it returns zero. Which of the following implementations correctly achieves this?
hard
A. Func lengthFunc = s => { if (s == null) return 0; else return s.Length; };
B. Func lengthFunc = s => s.Length;
C. Func lengthFunc = s => string.IsNullOrEmpty(s) ? 0 : s.Length;
D. Func lengthFunc = s => s == "" ? s.Length : 0;
Solution
Step 1: Understand the requirement
The function must return 0 if the string is null or empty, else return its length.
Step 2: Analyze each option
Func lengthFunc = s => string.IsNullOrEmpty(s) ? 0 : s.Length; uses string.IsNullOrEmpty to check both conditions and returns 0 or length accordingly, which is correct. Func lengthFunc = s => s.Length; does not check for null or empty and may throw an error. Func lengthFunc = s => { if (s == null) return 0; else return s.Length; }; checks only for null, not empty. Func lengthFunc = s => s == "" ? s.Length : 0; returns length only if string is empty, which is opposite.
Final Answer:
Func<string, int> lengthFunc = s => string.IsNullOrEmpty(s) ? 0 : s.Length; -> Option C
Quick Check:
Check null or empty with IsNullOrEmpty = Func lengthFunc = s => string.IsNullOrEmpty(s) ? 0 : s.Length; [OK]
Hint: Use string.IsNullOrEmpty to check safely [OK]
Common Mistakes:
Not checking empty string
Only checking null but not empty
Returning wrong value for empty string
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.