C#

C# 条件分岐課題2

(プログラミング初心者の進捗と覚書です。
基本的に個人用ですが、改善できる点や誤りなどあれば指摘していただけるとありがたいです)

下記URLの練習問題を解いた。
前回の練習にコメントをくださった方の指摘を踏まえて実践した。

http://kitako.tokyo/lib/CsExercise.aspx?id=3

月を表す数値を入力し、その月の日数を表示するプログラムを作成しなさい。2 月は 28 日とします。
また、1 ~ 12 以外の数値が入力された場合に、“入力が間違っています”と表示しなさい。

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int month = GetMonth();
            int days = GetDays(month);
            Console.WriteLine($"{month}月は{days}日あります");
            Console.ReadKey();
        }

        static int GetMonth()
        {
            while (true)
            {
                Console.WriteLine("1から12までの各月を表す数字を入力してください");
                if (!int.TryParse(Console.ReadLine(), out int result))
                {
                    Console.WriteLine("入力が間違っています");
                    continue;
                }
                if (result >= 1 && result <= 12) return result;
            }
        }

        static int GetDays(int month)
        {
            List<int> month_30days_list = new List<int>
            { 4, 6, 9, 11 };

            List<int> month_31days_list = new List<int>
            { 1, 3, 5, 7, 8, 10, 12 };

            if (month_30days_list.Any(x => x == month)) return 30;
            else if (month_31days_list.Any(x => x == month)) return 31;
            else return 28;
        }
    }
}

前回からの改善点:
1. 主要機能となるメソッドを別に定義することで、Mainメソッドをすっきりさせた。
2. ListおよびLinqの使い方を学んだ。課題のサイトにはswitchを使うよう指示があったが、ひたすらcaseを書き連ねていくのは見苦しいので、よりスマートな解決策を採ることができたとおもう。

より改善すべき点:
1. 28日しかないのは2月だけだが、それをelseに落とし込めてしまうのはどうかと思う。しかしわざわざ'2'だけを表す変数を宣言したり、if (month == 2)なんて場合わけする必要があるだろうか? まあ、現実にはうるう年のために特別な処理をするだろうけども。