diff --git a/EnumItem/EnumItem.sln b/EnumItem/EnumItem.sln new file mode 100644 index 0000000..832bed1 --- /dev/null +++ b/EnumItem/EnumItem.sln @@ -0,0 +1,50 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26124.0 +MinimumVisualStudioVersion = 15.0.26124.0 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EnumItem", "EnumItem\EnumItem.csproj", "{5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EnumItemTest", "EnumItemTest\EnumItemTest.csproj", "{4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|x64.ActiveCfg = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|x64.Build.0 = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|x86.ActiveCfg = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Debug|x86.Build.0 = Debug|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|Any CPU.Build.0 = Release|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|x64.ActiveCfg = Release|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|x64.Build.0 = Release|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|x86.ActiveCfg = Release|Any CPU + {5DD2F8BF-E7B5-4E9E-898E-8A868934E5D0}.Release|x86.Build.0 = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|x64.ActiveCfg = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|x64.Build.0 = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|x86.ActiveCfg = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Debug|x86.Build.0 = Debug|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|Any CPU.Build.0 = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|x64.ActiveCfg = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|x64.Build.0 = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|x86.ActiveCfg = Release|Any CPU + {4EAD2569-EA87-48B5-BDEA-F6BD83F87F96}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2554EAE2-F0E3-4627-B65D-59B3036D0C6C} + EndGlobalSection +EndGlobal diff --git a/EnumItem/EnumItem/EnumAttribute.cs b/EnumItem/EnumItem/EnumAttribute.cs new file mode 100644 index 0000000..2f3a519 --- /dev/null +++ b/EnumItem/EnumItem/EnumAttribute.cs @@ -0,0 +1,15 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; + +namespace EnumItem +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple =false, Inherited = false)] + public class EnumAttribute : Attribute + { + public int Id { get; set; } + public string Name { get; set; } + public string IdAndName { get; set; } + } +} diff --git a/EnumItem/EnumItem/EnumHelper.cs b/EnumItem/EnumItem/EnumHelper.cs new file mode 100644 index 0000000..d393a7c --- /dev/null +++ b/EnumItem/EnumItem/EnumHelper.cs @@ -0,0 +1,74 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace EnumItem +{ + public class EnumHelper + { + enum State { + Id = 0, + Name = 1, + IdAndName = 2, + } + public string GetKbn(string key, int state = 1) + { + var type = typeof(T); + foreach (var v in type.GetFields()) + { + var val = v.GetValue(key); + EnumAttribute[] items = (EnumAttribute[])v.GetCustomAttributes(typeof(EnumAttribute), false); + foreach (var item in items) + { + if (key.Equals(val)) + { + if (state == (int)State.Id) return item.Id.ToString(); + if (state == (int)State.IdAndName) return item.IdAndName; + + return item.Name; + } + } + } + return string.Empty; + } + public string GetKbn(int key, int state = 1) + { + var type = typeof(T); + foreach (var v in type.GetFields()) + { + var val = (int)v.GetValue(key); + EnumAttribute[] items = (EnumAttribute[])v.GetCustomAttributes(typeof(EnumAttribute), false); + foreach (var item in items) + { + if (key.Equals(val)) + { + if (state == (int)State.Id) return item.Id.ToString(); + if (state == (int)State.IdAndName) return item.IdAndName; + + return item.Name; + } + } + } + return string.Empty; + } + + public IEnumerable GetAll() + { + var type = typeof(T); + foreach (var v in type.GetFields()) + { + EnumAttribute[] items = (EnumAttribute[])v.GetCustomAttributes(typeof(EnumAttribute), false); + foreach (var item in items) + { + var display = new EnumItem(); + display.Id = item.Id; + display.Name = item.Name; + display.IdAndName = item.IdAndName; + yield return display; + } + } + } + } +} diff --git a/EnumItem/EnumItem/EnumItem.cs b/EnumItem/EnumItem/EnumItem.cs new file mode 100644 index 0000000..3b0d7e0 --- /dev/null +++ b/EnumItem/EnumItem/EnumItem.cs @@ -0,0 +1,11 @@ +using System; + +namespace EnumItem +{ + public class EnumItem + { + public int Id { get; set; } + public string Name { get; set; } + public string IdAndName { get; set; } + } +} diff --git a/EnumItem/EnumItem/EnumItem.csproj b/EnumItem/EnumItem/EnumItem.csproj new file mode 100644 index 0000000..9f5c4f4 --- /dev/null +++ b/EnumItem/EnumItem/EnumItem.csproj @@ -0,0 +1,7 @@ + + + + netstandard2.0 + + + diff --git a/EnumItem/EnumItemTest/EnumHelperTest.cs b/EnumItem/EnumItemTest/EnumHelperTest.cs new file mode 100644 index 0000000..81fafb0 --- /dev/null +++ b/EnumItem/EnumItemTest/EnumHelperTest.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Xunit; +using EnumItem; + +namespace EnumyItem.Test +{ + public class EnumHelperTest + { + private EnumHelper helper; + public EnumHelperTest() + { + this.helper = new EnumHelper(); + } + [Fact] + public void Test1() + { + Assert.Equal("test", this.helper.GetKbn(EnumSample.Kbn1)); + } + [Fact] + public void Test2() + { + Assert.Equal("aaaa", this.helper.GetKbn(EnumSample.Kbn2)); + } + [Fact] + public void Test3() + { + Assert.Equal("�R�{�R", this.helper.GetKbn(EnumSample.KbnYamamoto)); + } + [Fact] + public void Test4() + { + Assert.Equal("1:test", this.helper.GetKbn(EnumSample.Kbn1, 2)); + } + [Fact] + public void Test5() + { + Assert.Equal("2:aaaa", this.helper.GetKbn(EnumSample.Kbn2, 2)); + } + [Fact] + public void Test6() + { + Assert.Equal("3:�R�{�R", this.helper.GetKbn(EnumSample.KbnYamamoto, 2)); + } + [Fact] + public void Test7() + { + var list = this.helper.GetAll(); + Assert.Equal(3, list.Count()); + Assert.Equal("test", list.ElementAt(0).Name); + Assert.Equal("aaaa", list.ElementAt(1).Name); + Assert.Equal("�R�{�R", list.ElementAt(2).Name); + Assert.Equal("1:test", list.ElementAt(0).IdAndName); + Assert.Equal("2:aaaa", list.ElementAt(1).IdAndName); + Assert.Equal("3:�R�{�R", list.ElementAt(2).IdAndName); + } + } + + public class EnumSample + { + [Enum(Name = "test", IdAndName = "1:test")] + public readonly static int Kbn1 = 1; + [Enum(Name = "aaaa", IdAndName = "2:aaaa")] + public readonly static string Kbn2 = "aaaa"; + [Enum(Name = "�R�{�R", IdAndName = "3:�R�{�R")] + public readonly static string KbnYamamoto = "ccc"; + } +} diff --git a/EnumItem/EnumItemTest/EnumItemTest.csproj b/EnumItem/EnumItemTest/EnumItemTest.csproj new file mode 100644 index 0000000..4c4ec39 --- /dev/null +++ b/EnumItem/EnumItemTest/EnumItemTest.csproj @@ -0,0 +1,20 @@ + + + + netcoreapp2.0 + + false + + + + + + + + + + + + + +