Skip to content

Commit ba88892

Browse files
author
ahotko
committed
Added Enums Sample
1 parent 5127d2f commit ba88892

File tree

4 files changed

+148
-0
lines changed

4 files changed

+148
-0
lines changed

CSharp Code Samples/CodeSamples/Alterations/Extensions/ClassExtensions.cs

+27
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
2+
using System.ComponentModel;
23
using System.Linq;
4+
using System.Reflection;
35
using System.Text;
46

57
namespace CodeSamples.Alterations.Extensions
@@ -32,5 +34,30 @@ public static void WriteToConsole(this string value)
3234
{
3335
Console.WriteLine($"Contents Of String = {value}");
3436
}
37+
38+
public static string GetDescription<T>(this T enumerationValue) where T : struct
39+
{
40+
Type type = enumerationValue.GetType();
41+
if (!type.IsEnum)
42+
{
43+
throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue");
44+
}
45+
46+
//Tries to find a DescriptionAttribute for a potential friendly name
47+
//for the enum
48+
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
49+
if (memberInfo != null && memberInfo.Length > 0)
50+
{
51+
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
52+
53+
if (attrs != null && attrs.Length > 0)
54+
{
55+
//Pull out the description value
56+
return ((DescriptionAttribute)attrs[0]).Description;
57+
}
58+
}
59+
//If we have no description attribute, just return the ToString of the enum
60+
return enumerationValue.ToString();
61+
}
3562
}
3663
}

CSharp Code Samples/CodeSamples/CodeSamples.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<Compile Include="Comparing\Equatable.cs" />
6666
<Compile Include="ConditionalDefines\ConditionalDefinesSample.cs" />
6767
<Compile Include="Constants.cs" />
68+
<Compile Include="Enums\EnumSample.cs" />
6869
<Compile Include="ISampleExecute.cs" />
6970
<Compile Include="MultiThreading\BackgroundWorkerSample.cs" />
7071
<Compile Include="MultiThreading\MultithreadingSample.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using System;
2+
using System.ComponentModel;
3+
using CodeSamples.Alterations.Extensions;
4+
5+
namespace CodeSamples.Enums
6+
{
7+
internal enum WeekDay
8+
{
9+
Monday,
10+
Tuesday,
11+
Wednesday,
12+
Thursday,
13+
Friday,
14+
Saturday,
15+
Sunday
16+
}
17+
18+
internal enum Priority : short
19+
{
20+
Lowest = -2,
21+
Low = -1,
22+
Normal = 0,
23+
High = 1,
24+
Highest = 2
25+
}
26+
27+
[Flags]
28+
internal enum SidesAndCorners
29+
{
30+
None = 0,
31+
Top = 1,
32+
Bottom = 2,
33+
Left = 4,
34+
Right = 8,
35+
//
36+
TopLeft = Top | Left,
37+
TopRight = Top | Right,
38+
BottomLeft = Bottom | Left,
39+
BottomRight = Bottom | Right,
40+
//
41+
Full = Top | Bottom | Left | Right
42+
}
43+
44+
internal enum Status
45+
{
46+
[Description("Not Completed")]
47+
NotCompleted,
48+
Completed,
49+
Error
50+
}
51+
52+
public class EnumSample : SampleExecute
53+
{
54+
private void OutputSidesAndCorners(SidesAndCorners sidesAndCorners)
55+
{
56+
Console.WriteLine($"SidesAndCorners Enum values: default={sidesAndCorners.ToString()}, string={sidesAndCorners.ToString("g")}, flags={sidesAndCorners.ToString("f")}, decimal={sidesAndCorners.ToString("d")}, hex=0x{sidesAndCorners.ToString("x")}");
57+
}
58+
59+
public override void Execute()
60+
{
61+
Title("EnumSampleExecute");
62+
63+
Section("Simple Enum");
64+
//'This must be Thursday,' said Arthur to himself, sinking low over his beer. 'I never could get the hang of Thursdays.'
65+
WeekDay weekDay = WeekDay.Thursday;
66+
Console.WriteLine($"weekDay Enum value: default={weekDay.ToString()}, string={weekDay.ToString("g")}, decimal={weekDay.ToString("d")}, hex=0x{weekDay.ToString("x")}");
67+
var enumValues = Enum.GetNames(typeof(WeekDay));
68+
Console.WriteLine("WeekDays Enum values:");
69+
foreach (string value in enumValues)
70+
{
71+
Console.WriteLine(value);
72+
}
73+
LineBreak();
74+
75+
Section("Typed Enum (short)");
76+
Priority priority = Priority.Low;
77+
Console.WriteLine($"Priority Enum values: default={priority.ToString()}, string={priority.ToString("g")}, decimal={priority.ToString("d")}, hex=0x{priority.ToString("x")}");
78+
priority = Priority.Normal;
79+
Console.WriteLine($"Priority Enum values: default={priority.ToString()}, string={priority.ToString("g")}, decimal={priority.ToString("d")}, hex=0x{priority.ToString("x")}");
80+
priority = Priority.Highest;
81+
Console.WriteLine($"Priority Enum values: default={priority.ToString()}, string={priority.ToString("g")}, decimal={priority.ToString("d")}, hex=0x{priority.ToString("x")}");
82+
83+
84+
Section("Enum Flags");
85+
SidesAndCorners sidesAndCorners = SidesAndCorners.Bottom;
86+
OutputSidesAndCorners(sidesAndCorners);
87+
sidesAndCorners = SidesAndCorners.Full;
88+
OutputSidesAndCorners(sidesAndCorners);
89+
sidesAndCorners = SidesAndCorners.Top | SidesAndCorners.Bottom;
90+
OutputSidesAndCorners(sidesAndCorners);
91+
sidesAndCorners = SidesAndCorners.TopLeft;
92+
OutputSidesAndCorners(sidesAndCorners);
93+
94+
//checking flags
95+
Console.WriteLine($"sidesAndCorners.Top is set={sidesAndCorners.HasFlag(SidesAndCorners.Top)}");
96+
Console.WriteLine($"sidesAndCorners.TopLeft is set={sidesAndCorners.HasFlag(SidesAndCorners.TopLeft)}");
97+
Console.WriteLine($"sidesAndCorners.Full is set={sidesAndCorners.HasFlag(SidesAndCorners.Full)}");
98+
Console.WriteLine($"sidesAndCorners.Bottom is set={sidesAndCorners.HasFlag(SidesAndCorners.Bottom)}");
99+
100+
Section("Enum with Description");
101+
Status status= Status.NotCompleted;
102+
Console.WriteLine($"status value: default={status.ToString()}, string={status.ToString("g")}, decimal={status.ToString("d")}, hex=0x{status.ToString("x")}");
103+
var statusValues = Enum.GetValues(typeof(Status));
104+
Console.WriteLine("Status Enum values:");
105+
foreach (Status value in statusValues)
106+
{
107+
Console.WriteLine($"value={value.ToString()}, description={value.GetDescription<Status>()}");
108+
}
109+
LineBreak();
110+
111+
Finish();
112+
}
113+
}
114+
}

CSharp Code Samples/CodeSamples/Program.cs

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using CodeSamples.Classes;
44
using CodeSamples.Comparing;
55
using CodeSamples.ConditionalDefines;
6+
using CodeSamples.Enums;
67
using CodeSamples.MultiThreading;
78
using CodeSamples.Patterns;
89
using CodeSamples.SOLID.S01_SingleResponsibilityPrinciple_SRP;
@@ -143,6 +144,11 @@ static void Main(string[] args)
143144
conditionalDefinesSample.Execute();
144145
#endregion
145146

147+
#region Enums
148+
var enumSample = new EnumSample();
149+
enumSample.Execute();
150+
#endregion
151+
146152
Console.WriteLine();
147153
Console.WriteLine("End Code Samples");
148154

0 commit comments

Comments
 (0)