Understanding Underlying Numeric Values of Enums in C#
📖 Scenario: Imagine you are creating a simple program to represent different levels of user access in a system. Each access level has a name and an underlying number that the computer uses internally.
🎯 Goal: You will create an enum to represent access levels, then write code to find and display the numeric values behind each level.
📋 What You'll Learn
Create an enum called AccessLevel with exact members: Guest, User, Moderator, Admin
Assign default underlying numeric values to the enum members
Create a variable to hold the enum type
Write a loop to get the numeric value of each enum member
Print the name and numeric value of each enum member
💡 Why This Matters
🌍 Real World
Enums are used in many programs to represent fixed sets of related values, like user roles, days of the week, or status codes.
💼 Career
Understanding enums and their numeric values helps in debugging, working with APIs, and writing clear, maintainable code.
Progress0 / 4 steps
1
Create the AccessLevel enum
Create an enum called AccessLevel with these members exactly: Guest, User, Moderator, Admin. Use default numeric values starting from 0.
C Sharp (C#)
Hint
Enums automatically assign numbers starting at 0 unless you specify otherwise.
2
Create a variable to hold all enum values
Create a variable called levels and set it to Enum.GetValues(typeof(AccessLevel)) to get all enum members.
C Sharp (C#)
Hint
This method returns all the enum members so you can loop through them.
3
Loop through enum members and get numeric values
Use a foreach loop with variable level to iterate over levels. Inside the loop, create an int variable called numericValue and set it to the numeric value of level by casting it to int.
C Sharp (C#)
Hint
Casting the enum member to int gives its underlying number.
4
Print each enum member with its numeric value
Inside the foreach loop, add a Console.WriteLine statement to print the enum member name and its numeric value in this format: "Guest = 0".
C Sharp (C#)
Hint
Use string interpolation with $"{level} = {numericValue}" to print the name and number.
Practice
(1/5)
1. What is the underlying numeric value of an enum member in C# if not explicitly set?
easy
A. It starts at 0 and increments by 1 for each member
B. It is always 1 for all members
C. It is a random number assigned by the compiler
D. It must be manually assigned for each member
Solution
Step 1: Understand default enum numbering
By default, C# assigns the first enum member the value 0.
Step 2: Check subsequent members
Each following member increments by 1 automatically unless explicitly set.
Final Answer:
It starts at 0 and increments by 1 for each member -> Option A
Quick Check:
Default enum values start at 0 and increment [OK]
Hint: Remember enums start at zero unless you say otherwise [OK]
Common Mistakes:
Thinking enums start at 1 by default
Assuming enum values are random
Believing manual assignment is always required
2. Which of the following is the correct way to get the numeric value of an enum member Day.Monday in C#?
easy
A. int value = Convert.ToInt32(Day.Monday.ToString());
B. int value = Day.Monday.ToInt();
C. int value = Day.Monday.Value;
D. int value = (int)Day.Monday;
Solution
Step 1: Recall casting enum to int
In C#, you get the numeric value by casting the enum member to int using (int).
Step 2: Check other options
Enums have no ToInt() method or Value property; Convert.ToInt32(Day.Monday.ToString()) parses the name ("Monday") and throws FormatException.
Final Answer:
int value = (int)Day.Monday; -> Option D
Quick Check:
Cast enum to int with (int) [OK]
Hint: Cast enum to int with (int) to get its number [OK]
Common Mistakes:
Using non-existent methods like ToInt()
Trying to access a Value property
Converting enum.ToString() to int (parses name)
3. Given the enum:
enum Color { Red = 3, Green, Blue }
What is the output of this code?
Console.WriteLine((int)Color.Green);
medium
A. 4
B. 3
C. 1
D. 0
Solution
Step 1: Identify explicit enum value
Color.Red is set to 3 explicitly.
Step 2: Understand implicit increment
Color.Green is next, so it gets 4 (3 + 1).
Final Answer:
4 -> Option A
Quick Check:
Enum increments from explicit value [OK]
Hint: Next enum value increments by 1 from previous explicit value [OK]
Common Mistakes:
Assuming Green is 1 by default
Thinking Green equals Red's value
Forgetting implicit increment after explicit value
4. What is wrong with this code snippet?
enum Status { Active = 1, Inactive = 1, Pending = 2 }
medium
A. Enum members cannot have duplicate values
B. Nothing is wrong; duplicate values are allowed
C. Enum members must be strings, not numbers
D. Enum members must be assigned sequentially starting at 0
Solution
Step 1: Check enum value rules
C# allows enum members to share the same underlying numeric value.
Step 2: Verify other options
Enum members can be numbers, do not need sequential values, and duplicates are allowed.
Final Answer:
Nothing is wrong; duplicate values are allowed -> Option B
Quick Check:
Duplicate enum values are valid in C# [OK]
Hint: Duplicate enum values are allowed in C# [OK]
Common Mistakes:
Thinking duplicate enum values cause errors
Believing enums must start at 0 and be sequential
Confusing enum members with strings
5. You have this enum:
enum Level { Low = 1, Medium = 5, High = 10 }
Which code correctly checks if an integer variable score matches any enum value?
Enum.IsDefined checks if a given integer matches any enum member's underlying value.
Step 2: Analyze other options
A checks range (includes invalid like 2); B casts int to enum (always succeeds) != null (always true); C direct int == enum comparisons do not compile without casting enum to int.
Final Answer:
bool isMatch = Enum.IsDefined(typeof(Level), score); -> Option C
Quick Check:
Use Enum.IsDefined to check valid enum values [OK]
Hint: Use Enum.IsDefined to check if int matches enum value [OK]
Common Mistakes:
Casting int to enum without validation
Checking range instead of exact enum values
Comparing int directly to enum members without casting
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.