Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 27 additions & 0 deletions
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‎

Lines changed: 1 addition & 0 deletions
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" />
Lines changed: 114 additions & 0 deletions
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‎

Lines changed: 6 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /