보관함

csharp enum 을 사용하는 코드 샘플

출처 : https://qiita.com/mkuwan/items/be6745f2c9e7823f8a66

public static class TypeExtention
{
	/// <summary>
	/// enumの値リストを取得
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <returns></returns>
	public static List<T> GetEnumList<T>(this Type type) where T : Enum
	{
		return Enum.GetValues(typeof(T)).Cast<T>().ToList();
	}

	/// <summary>
	/// enumのDescripntionリストを取得
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <returns></returns>
	public static IEnumerable<string> GetEnumDescriptionEnumerable<T>(this Type type) where T : Enum
	{
		foreach (T value in Enum.GetValues(typeof(T)))
			yield return value.GetDescriptionFromValue();
	}

	/// <summary>
	/// enumのDescripntionリストを取得
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <returns></returns>
	public static List<string> GetEnumDescriptionList<T>(this Type type) where T : Enum
	{
		List<string> descriptionList = new List<string>();
		foreach (T value in Enum.GetValues(typeof(T)))
			descriptionList.Add(value.GetDescriptionFromValue());

		return descriptionList;
	}
}

사용예

public enum SampleEnum
{
	[Description("東京")]
	Tokyo = 1,

	[Description("名古屋")]
	Nagoya = 3,

	[Description("札幌")]
	Sapporo = 5,

	[Description("大阪")]
	Osaka = 7

}

static void Test2()
{
	Console.WriteLine("EnumExtention  GetDescriptionFromValueを使ってTokyoのDescriptionを取得");
	Console.WriteLine(SampleEnum.Tokyo.GetDescriptionFromValue());
	Console.WriteLine();

	Console.WriteLine("StringExtention  GetEnumValueFromDescriptionを使ってDescriptionからenum値を取得");
	Console.WriteLine("名古屋".GetEnumValueFromDescription<SampleEnum>());
	Console.WriteLine();

	Console.WriteLine("IntExtention  GetEnumDescriptionFromIntを使ってint値からDescriptionを取得");
	var sapporo = ((int)5).GetEnumDescriptionFromInt<SampleEnum>();
	Console.WriteLine(sapporo);
	Console.WriteLine();

	Console.WriteLine("IntExtention  GetEnumValueFromIntを使ってint値からenum値を取得");
	var osaka = ((int)7).GetEnumValueFromInt<SampleEnum>();
	Console.WriteLine(osaka);
	Console.WriteLine();

	Console.WriteLine("TypeExtention  GetEnumListを使ってenumの値リストを取得");
	var enumValues = typeof(SampleEnum).GetEnumList<SampleEnum>();
	foreach (var e in enumValues)
		Console.WriteLine(e);

	Console.WriteLine();

	Console.WriteLine("TypeExtention  GetEnumDescriptionListを使ってDescriptionリストを取得");
	var enumDescriptions = typeof(SampleEnum).GetEnumDescriptionList<SampleEnum>();
	foreach (var e in enumDescriptions)
		Console.WriteLine(e);

	Console.WriteLine();

	Console.WriteLine("TypeExtention  GetEnumDescriptionEnumerableを使ってDescriptionリストを取得");
	var enumDescriptionsEnumerable = typeof(SampleEnum).GetEnumDescriptionEnumerable<SampleEnum>();
	foreach (var e in enumDescriptionsEnumerable)
		Console.WriteLine(e);

	Console.ReadLine();
}

 

dotnet core api version

출처 : https://dotnetcoretutorials.com/2017/01/17/api-versioning-asp-net-core/

Install-Package Microsoft.AspNetCore.Mvc.Versioning

startup.cs

public void ConfigureServices(IServiceCollection services)
{
 // ApiVersioning을 추가
 services.AddApiVersioning(options =>
 {
     // 클라이언트에 Api 버전을 통지
     options.ReportApiVersions = true;
     // 이것이 없으면 클라이언트 측에서 에러가 나온다
     options.AssumeDefaultVersionWhenUnspecified = true;
     // Api의 default 버전을 1.0으로 설정
     options.DefaultApiVersion = new ApiVersion(1, 0);
 });
}

출처에 보면 여러가지 방식(Url Query Based Versioning, URL Path Based Versioning, Http Header Based Versiong) 등이 있으나…

역시 익숙한 방식은

[ApiVersion("1.0")]
[Route("api/{version:apiVersion}/home")]
public class HomeV1Controller : Controller
{
	[HttpGet]
	public string Get() => "v1";
}
[ApiVersion("2.0")]
[Route("api/{version:apiVersion}/home")]
public class HomeV2Controller : Controller
{
	[HttpGet]
	public string Get() => "v2";
}

혹은

[ApiVersion("1.0")]
[ApiVersion("2.0")]
[Route("v{version:apiVersion}/[controller]")]
public class HomeController : Controller
{
 [HttpGet]
 public string Get() => "v1";

 // Api 버전을 덮어 쓰기
 [HttpGet, MapToApiVersion("2.0")]
 public string GetV2() => "v2";
}

/v1/Home, /v2/Home 의 형식으로 call 가능함

 

mac에 dotnet 환경 설정

지금까지 개발을 .net 5.0 에서 해오다가 이번에 환경을 .net 6.0 으로 바꾸면서

mac 에서는 5.0 이하 버전의 .net 은 직접 설치를 해왔다.

그러다 6.0으로 바꾸면서 brew 를 사용해서 설치가 가능한것을 확인했다.

// 일단 기존 dotnet을 remove 하기 위해 brew 로 dotnet 설치
brew install --cask dotnet
brew uninstall dotnet

// 6.0 설치
brew install --cask dotnet-sdk

혹시 기존 runtime 이나 sdk 가 남아 있는지 확인하기 위해

dotnet --list-runtimes
dotnet --list-sdks

혹시 남아 있는 패키지가 있으면

https://github.com/dotnet/cli-lab/releases 여기서 dotnet-core-uninstall 툴을 내려받아서 아래와 같이 실행

dotnet-core-uninstall remove --runtime 5.0.14
dotnet-core-uninstall remove --sdk 5.0.14

제대로 동작하는지 확인하기 위해서

dotnet --version

dotnet tool도 업그레이드

dotnet tool list -g
dotnet tool update -g dotnet-ef
dotnet tool update -g microsoft.web.librarymanager.cli