using System.ComponentModel.DataAnnotations;
public enum SchoolEnrollmentLevel
[Display(Name = "499 and under")]
[Display(Name = "500-999")]
[Display(Name = "1,000-1,499")]
[Display(Name = "1,500 and over")]
public static string GetEnumDisplayName(Enum enumValue)
var displayAttribute = enumValue.GetType().GetField(enumValue.ToString()).GetCustomAttribute<DisplayAttribute>();
return displayAttribute?.Name ?? enumValue.ToString();
public static void Main()
PrintFees(SchoolEnrollmentLevel.Under_500);
PrintFees(SchoolEnrollmentLevel._500_999);
PrintFees(SchoolEnrollmentLevel._1000_1499);
PrintFees(SchoolEnrollmentLevel.Over_1500);
public static void PrintFees(SchoolEnrollmentLevel enrollmentLevel)
Console.WriteLine(GetEnumDisplayName(enrollmentLevel));
Console.WriteLine($"Month {index}: {CalculateNewMembershipFee(index, enrollmentLevel).ToString("$#000.00")}");
public static decimal CalculateNewMembershipFee(int month, SchoolEnrollmentLevel level)
if (month < 1 || month > 12)
throw new IndexOutOfRangeException();
case SchoolEnrollmentLevel.Under_500:
case SchoolEnrollmentLevel._500_999:
case SchoolEnrollmentLevel._1000_1499:
case SchoolEnrollmentLevel.Over_1500:
throw new IndexOutOfRangeException();
var result = month * (1M / 12M) * enrollmentFee;