C #에서 switch 문 대신 enum 및 struct 사용

user2019

switch 문을 사용하여 사용자 입력 유형에 따라 변환을 수행하기 위해 아래 코드를 사용하고 있습니다. 여기서 switch 문 대신 "enum"과 "struct"를 사용할 수 있습니까?

using System;
using static System.Console;
using static System.Convert;

namespace Problem
{
    class Program
    {
        static void Main(string[] args)
        {
            double centimeter, liters, kilometer, kilogram;
            WriteLine("Enter the value you wanted to convert: ");
            int input = ToInt32(ReadLine());
            WriteLine("\n Press Any Of The Given Choices \n I->convert from inches to centimeters." +
                      "\n G->convert from gallons to liters.\n M->convert from mile to kilometer."+
                      "\n P->convert from pound to kilogram.");
            char choice = Char.ToLower(ToChar(ReadLine()));
            switch (choice)
            {
                case 'i':
                    centimeter = input / 0.3937;                       //1 cm is equal is 0.3037 inch
                    WriteLine($"In Centimeters: {centimeter}");
                    break;
                case 'g':
                    liters= input * 3.78;                             // 1 gallon=3.78 litters
                    WriteLine($"In Liters: { liters}");
                    break;
                case 'm':
                    kilometer = input *1.60;                          // 1 mile=1.4 KM
                    WriteLine($"In kilometer: { kilometer}");
                    break;
                case 'p':
                    kilogram = input * 0.453;                          // 
                    WriteLine($"In kilogram: { kilogram}");
                    break;
                default:
                    WriteLine("You Enter A Invalid Choice, Please Enter A Valid Choice...!");
                    ReadLine();
                    break;
                   }
            ReadKey();
        }
    }
}
파비오

Dictionary대신 사용할 수 있습니다 switch.
더 깔끔한 방법으로 인터페이스를 만들 수 있습니다.

public interface IConverter
{
    string GetFormattedResult(int value);
}

그런 다음 보유한 모든 단위에 대한 자체 구현을 만듭니다.

public class CentimeterConverter : IConverter
{
    private const double COEFFICENT = 0.3937;
    public string GetFormattedResult(int value)
    {
        var centimeter = input / COEFFICENT ;
        return $"In Centimeters: {centimeter}";
    }
}

그런 다음 코드에서 키-선택 문자 및 값-변환기 구현 인스턴스로 사전을 만듭니다.

static void Main(string[] args)
{
    var converters = new Dictionary<char, IConverter>
    {
        { 'i', new CentimeterConverter() },
        { 'g', new LitersConverter() }
    }

    WriteLine("Enter the value you wanted to convert: ");
    int input = ToInt32(ReadLine());

    var choiceText = 
        "Press Any Of The Given Choices
         I->convert from inches to centimeters.
         G->convert from gallons to liters.
         M->convert from mile to kilometer.
         P->convert from pound to kilogram.";
    WriteLine(choiceText);

    char choice = Char.ToLower(ToChar(ReadLine()));

    var converter = converters[choice];
    WriteLine(converter.Convert(input));

    ReadKey();
}

키를 좀 더 읽기 쉽게 만들기 위해 상수와 함께 정적 클래스를 사용할 수 있습니다.

public static class ConverterKayes
{
    public const char InchesToCentimaters = 'i';
    public const char GallonsToLiters = 'g';
}

열거 형은 정수 유형이므로 이름이 키가 될 열거 형을 만들 수 있습니다.

public enum Keys
{
    I = 1,
    G = 2
}

그러나이 열거 형은 코드의 가독성에 더 이상 가치를 제공하지 않습니다.

정말로 열거 형을 원한다면 DescriptionAttribute속성에서 키를 정의 할 수있는 위치를 사용할 수 있습니다 .

public enum Keys
{
    [Description("I")] InchesToCentimeters = 1,
    [Description("G")] GallonsToLiters = 2
}

그러나 해당 속성에서 값을 검색하려면 몇 가지 메서드를 만들어야합니다. 계수도 동일합니다. 정적 클래스의 상수로 저장하는 것이 훨씬 쉽습니다.

또 다른 접근 방식은 KeyedCollection모든 키에 대해 동일한 논리를 가지고 값만 변경되기 때문에 귀하의 경우에 적합 할 수 있습니다.

public class ConverterToContinentalUnit
{
    public char Key { get; set; }
    public double Coefficent { get; set; }
    public string PrefixForResult { get; set; }

    public string GetFormattedResult(int value)
    {
        var continentalUnit = input / Coefficent;
        return $"{PrefixForResult}: {continentalUnit}";
    }
}

public class ConverterCollection: KeyedCollection<int, ConverterToContinentalUnit>
{
    // This need to be implemented and return key value
    protected override int GetKeyForItem(ConverterToContinentalUnit item)
    {
        return item.Key ;
    }
}

그런 다음 사용

static void Main(string[] args)
{
    var converters = new ConverterCollection();
    var toCentimeters = new ConverterToContinentalUnit 
    { 
        Key = "i", 
        Coefficent = 0.3937, 
        PrefixForResult = "In Centimeters"
    }

    converters.Add(toCentimeters );

    WriteLine("Enter the value you wanted to convert: ");
    int input = ToInt32(ReadLine());

    var choiceText = 
        "Press Any Of The Given Choices
         I->convert from inches to centimeters.
         G->convert from gallons to liters.
         M->convert from mile to kilometer.
         P->convert from pound to kilogram.";
    WriteLine(choiceText);

    char choice = Char.ToLower(ToChar(ReadLine()));

    var converter = converters[choice];
    WriteLine(converter.Convert(input));

    ReadKey();
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Enum 및 Switch 문 C ++

분류에서Dev

switch 문 사용 및 C #의 SqlDataAdapter에서 데이터 읽기

분류에서Dev

Swift에서 UITableViewController로 enum 및 switch ()를 사용하는 방법

분류에서Dev

나머지 코드는 동일하게 유지하면서 Switch 문에서 C # Enum을 사용하는 방법

분류에서Dev

C에서 scanf () 및 printf () 대신 read () 및 write () 사용

분류에서Dev

C #을 사용하여 switch 문에서 forloop 사용

분류에서Dev

Java에서 switch 문 사용

분류에서Dev

C 문제에서 time () 및 clock () 사용

분류에서Dev

Posix Semaphore에서 공유 메모리 사용 C에서 대기 및 신호

분류에서Dev

사용 이유 : if 문에서 {대신

분류에서Dev

jquery를 사용하는 입력 값 대신 배열 또는 switch 문에서 조건부

분류에서Dev

`switch` 문에서 C ++ 20`[likely]]`/`[[unlikely]]`를 올바르게 사용

분류에서Dev

C의 다른 스위치에서 Switch 문 사용

분류에서Dev

if / else 문 대신 switch

분류에서Dev

htaccess 파일에서?, = 및 & 대신 슬래시를 사용하여 쿼리 문자열에 서명합니까?

분류에서Dev

C 코드의 if 및 switch 문에서 예기치 않은 출력

분류에서Dev

C ++에서 "+"를 사용한 정수 변수 및 문자열 연결에 대한 매우 기본적인 질문

분류에서Dev

C # SqlCommand 및 Sql 연결 및 System.Web.UI에 대한 지시문 사용

분류에서Dev

C # 제네릭 대리자에 대한 C ++ 해당 구문 및 람다 사용

분류에서Dev

맵 C ++에서 enum을 키로 사용하여 값 설정 및 가져 오기

분류에서Dev

C에서이 switch 문에 대한 대안

분류에서Dev

C ++에서 assert를 사용하는 대신 if 문을 사용할 수없는 이유는 무엇입니까?

분류에서Dev

switch 문에서 java.lang.Class <?> 사용

분류에서Dev

변환에서 switch 문 사용

분류에서Dev

.pdf 대신 문서 .hml 형식 사용

분류에서Dev

C #에서 사용자 예 / 아니요 콘솔 입력에 대한 구문 분석 및 루핑

분류에서Dev

NSBundle 대신 사용자 문서에서 Plist에 액세스

분류에서Dev

함수에 Enum을 전달하는 방법 및 if 문에서 enum을 평가하는 방법 C #

분류에서Dev

C ++에서 지시문 및 선언 사용

Related 관련 기사

  1. 1

    Enum 및 Switch 문 C ++

  2. 2

    switch 문 사용 및 C #의 SqlDataAdapter에서 데이터 읽기

  3. 3

    Swift에서 UITableViewController로 enum 및 switch ()를 사용하는 방법

  4. 4

    나머지 코드는 동일하게 유지하면서 Switch 문에서 C # Enum을 사용하는 방법

  5. 5

    C에서 scanf () 및 printf () 대신 read () 및 write () 사용

  6. 6

    C #을 사용하여 switch 문에서 forloop 사용

  7. 7

    Java에서 switch 문 사용

  8. 8

    C 문제에서 time () 및 clock () 사용

  9. 9

    Posix Semaphore에서 공유 메모리 사용 C에서 대기 및 신호

  10. 10

    사용 이유 : if 문에서 {대신

  11. 11

    jquery를 사용하는 입력 값 대신 배열 또는 switch 문에서 조건부

  12. 12

    `switch` 문에서 C ++ 20`[likely]]`/`[[unlikely]]`를 올바르게 사용

  13. 13

    C의 다른 스위치에서 Switch 문 사용

  14. 14

    if / else 문 대신 switch

  15. 15

    htaccess 파일에서?, = 및 & 대신 슬래시를 사용하여 쿼리 문자열에 서명합니까?

  16. 16

    C 코드의 if 및 switch 문에서 예기치 않은 출력

  17. 17

    C ++에서 "+"를 사용한 정수 변수 및 문자열 연결에 대한 매우 기본적인 질문

  18. 18

    C # SqlCommand 및 Sql 연결 및 System.Web.UI에 대한 지시문 사용

  19. 19

    C # 제네릭 대리자에 대한 C ++ 해당 구문 및 람다 사용

  20. 20

    맵 C ++에서 enum을 키로 사용하여 값 설정 및 가져 오기

  21. 21

    C에서이 switch 문에 대한 대안

  22. 22

    C ++에서 assert를 사용하는 대신 if 문을 사용할 수없는 이유는 무엇입니까?

  23. 23

    switch 문에서 java.lang.Class <?> 사용

  24. 24

    변환에서 switch 문 사용

  25. 25

    .pdf 대신 문서 .hml 형식 사용

  26. 26

    C #에서 사용자 예 / 아니요 콘솔 입력에 대한 구문 분석 및 루핑

  27. 27

    NSBundle 대신 사용자 문서에서 Plist에 액세스

  28. 28

    함수에 Enum을 전달하는 방법 및 if 문에서 enum을 평가하는 방법 C #

  29. 29

    C ++에서 지시문 및 선언 사용

뜨겁다태그

보관