-1

モデル:

public class ServiceHours
{
    public int Id { get; set; }
    ...
    public TimeSpan? Monday { get; set; }
    public TimeSpan? Tuesday { get; set; }
    public TimeSpan? Wednesday { get; set; }
    public TimeSpan? Thursday { get; set; }
    public TimeSpan? Friday { get; set; }
    public TimeSpan? Saturday { get; set; }
    public TimeSpan? Sunday { get; set; }
}

現在、「サービス時間」オブジェクトのリストを反復処理しています (オプションで、1 日または複数の曜日の開始時間を保持できます)。DayOfWeekオブジェクトから列挙型に対応する値を動的に取得できるようにしたいと考えていDateTimeます。

これは機能しますが、あまりエレガントではありません

var today = DateTime.Today.DayOfWeek;

foreach (var item in myItems)
{
    var time = new TimeSpan?();

    if (today == DayOfWeek.Monday)
        time = item.Monday;
    else if (today == DayOfWeek.Tuesday)
        time = item.Tuesday;
    else if (today == DayOfWeek.Wednesday)
        time = item.Wednesday;
    else if (today == DayOfWeek.Thursday)
        time = item.Thursday;
    else if (today == DayOfWeek.Friday)
        time = item.Friday;
    else if (today == DayOfWeek.Saturday)
        time = item.Saturday;
    else if (today == DayOfWeek.Sunday)
        time = item.Sunday;

    ...
}

更新:当時はリフレクションを使用することになりましたが、これはそもそも非常に貧弱で素朴な設計であり、この質問はとにかくコードレビューに投稿する必要がありました-この質問は無視する必要があり、他の場合に備えてこの通知を追加するだけです一緒に来てください。ひどい質問にもかかわらず、助けようとした人々に感謝します!

4

2 に答える 2

0

Something like this probably (did not compiled this code though)

object.GetType().GetProperty(today.DayOfWeek.ToSring()).GetValue(object)

use reflection to get property value,with only condition that DayOfWeek enum member has to have exact name of the property present in object type.

于 2018-03-28T20:37:34.887 に答える