2017-07-12 3 views
-1

式本体にスイッチケース(または同様の効果)を実装するにはどうすればよいですか? Modelオブジェクトを作成しています(MyModelと呼ぶことができます)。フィールドの1つは反復フィールドです。再発は現在の曜日(月曜日の例は以下)に基づいています。基本的に私は週刊____を真とするようにしたいと思います。私はまた、String.Format()がこれをサポートする何かを持っている可能性があると考えていましたが、動作させることができませんでした。式ブロック内でスイッチケースまたは文字列フォーマットを行う方法

スイッチケースと
var my = new MyModel 
{ 
    Recurrence = new RecurrenceModel 
    { 
     WeeklyMonday = true //what it would be on a Monday 
    } 
}; 

私の試み

var my = new MyModel 
{ 
    switch(DateTime.Today.DayOfWeek.ToString()) 
     case "Monday": 
      Recurrence = new RecurrenceModel 
      { 
       WeeklyMonday = true 
      } 
      break; 
     default: 
      break; 
}; 

String.Formatの(と私の試み)

var my = new MyModel 
{ 
    Recurrence = new RecurrenceModel 
    { 
     String.Format("Weekly{0}", DateTime.Today.DayOfWeek.ToString()) = true 
    } 
}; 

答えて

2

私はあなたがC#にかなり新しいしている推測していますか?あなたがする必要がどのような

は、あなたが実際にプロパティに値を代入していない、あなたの試みの両方でこの

var my = new MyModel 
{ 
    Recurrence = new RecurrenceModel 
    { 
     WeeklyMonday = DateTime.Today.DayOfWeek == DayOfWeek.Monday 
    } 
}; 

のようなものです。有効なC#ではないため、コードはコンパイルされません。スイッチや文字列は必要ありません。私の例では

、私はあなたのモデルクラスにWeeklyMondayプロパティに

+1

ええ、かなり新しいC#。私は真実として終わるだろう、毎日のための簡単な声明を書いているとは思っていませんでした。ウィークリー____を働かせようとするのではなく、あなたのやり方を今すぐ明らかにしているようです。 –

+0

それは大丈夫です、私達はどこかで始める必要があります:)私は物事を簡単に保つことはしばしば物事を楽にします。 – simonlchilds

1

simonlchildsをDateTime.Today.DayOfWeek == DayOfWeek.Mondayの結果を代入しています権利です。これを行う最善の方法は、クラスのコンストラクタ内で、現在の日の値を評価して、どのプロパティをtrueに設定するかです。

私は個人的にこのようなことをします。このクラスはインスタンス化されるたびに

class RecurrenceModel 
{ 
    public RecurrenceModel() 
    { 
     GetType().GetProperty("Weekly" + DateTime.Today.DayOfWeek).SetValue(this, true); 
    } 

    public bool WeeklyMonday { get; set; } 
    public bool WeeklyTuesday { get; set; } 
    public bool WeeklyWednesday { get; set; } 
    public bool WeeklyThursday { get; set; } 
    public bool WeeklyFriday { get; set; } 
    public bool WeeklySaturday { get; set; } 
    public bool WeeklySunday { get; set; } 
} 

そのように、それは自動的に日がtrueにあり、これはあなたがする必要があるだろう、すべての方に設定します。

var my = new MyModel 
{ 
    Recurrence = new RecurrenceModel() 
}; 
+0

私はコンストラクタにロジックを追加することを提案しようとしていましたが、私は自分の電話にいて、それをすべてタイプしたくありませんでした! :D – simonlchilds

+0

@Jun Kangが行ったように追加するのは非常にエレガントですが、それは私の目的のためには機能しません。これはRecurrenceModelが使用される唯一の時間/方法ではありませんので、コンストラクタでは実行できません。 –

+0

問題は、このようなロジックを持つクラスのインスタンスを作成するためには、コンストラクタで行う必要があるということです。他の場所で同じクラスを使用している場合は、同じクラスの別のコンストラクタを作成して、異なるパラメータを取り入れることができます。それ以外の場合は、クラスをインスタンス化するたびにプロパティを明示的に設定する必要があります。 –

関連する問題