Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions EnumItem/EnumItem.sln
Original file line number Diff line number Diff line change
@@ -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
15 changes: 15 additions & 0 deletions EnumItem/EnumItem/EnumAttribute.cs
Original file line number Diff line number Diff line change
@@ -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; }
}
}
74 changes: 74 additions & 0 deletions EnumItem/EnumItem/EnumHelper.cs
Original file line number Diff line number Diff line change
@@ -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<T>(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<T>(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<EnumItem> GetAll<T>()
{
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;
}
}
}
}
}
11 changes: 11 additions & 0 deletions EnumItem/EnumItem/EnumItem.cs
Original file line number Diff line number Diff line change
@@ -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; }
}
}
7 changes: 7 additions & 0 deletions EnumItem/EnumItem/EnumItem.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

</Project>
70 changes: 70 additions & 0 deletions EnumItem/EnumItemTest/EnumHelperTest.cs
Original file line number Diff line number Diff line change
@@ -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>(EnumSample.Kbn1));
}
[Fact]
public void Test2()
{
Assert.Equal("aaaa", this.helper.GetKbn<EnumSample>(EnumSample.Kbn2));
}
[Fact]
public void Test3()
{
Assert.Equal("�R�{�R", this.helper.GetKbn<EnumSample>(EnumSample.KbnYamamoto));
}
[Fact]
public void Test4()
{
Assert.Equal("1:test", this.helper.GetKbn<EnumSample>(EnumSample.Kbn1, 2));
}
[Fact]
public void Test5()
{
Assert.Equal("2:aaaa", this.helper.GetKbn<EnumSample>(EnumSample.Kbn2, 2));
}
[Fact]
public void Test6()
{
Assert.Equal("3:�R�{�R", this.helper.GetKbn<EnumSample>(EnumSample.KbnYamamoto, 2));
}
[Fact]
public void Test7()
{
var list = this.helper.GetAll<EnumSample>();
Assert.Equal<int>(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";
}
}
20 changes: 20 additions & 0 deletions EnumItem/EnumItemTest/EnumItemTest.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
<PackageReference Include="xunit" Version="2.3.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\EnumItem\EnumItem.csproj" />
</ItemGroup>

</Project>