using System.Collections;
using System.Collections.Generic;
public class DOWeek : IEnumerable
public static DOWeek Monday { get; private set; }
public static DOWeek Tuesday { get; private set; }
public static DOWeek Wednesday { get; private set; }
public static DOWeek Thursday { get; private set; }
public static DOWeek Friday { get; private set; }
public static DOWeek Saturday { get; private set; }
public static DOWeek Sunday { get; private set; }
public static DOWeek[] ListOfDays;
public int Value {get; private set; }
public string Name {get; private set; }
public IEnumerator GetEnumerator()
return (IEnumerator)null;
Monday = new DOWeek(1, "Monday");
Tuesday = new DOWeek(2, "Tuesday");
Wednesday = new DOWeek(3, "Wednesday");
Thursday = new DOWeek(4, "Thursday");
Friday = new DOWeek(5, "Friday");
Saturday = new DOWeek(6, "Saturday");
Sunday = new DOWeek(7, "Sunday");
ListOfDays = new [] { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
private DOWeek (int pValue, string pName)
public DOWeek (int pValue)
Value = (pValue-1) % 7 + 1;
Name = ListOfDays.Single(dx => dx.Value == Value).Name;
public DOWeek (string pName)
DOWeek obx = ListOfDays.Single(dx => dx.Name==pName);
return string.Format("Day:{0},{1}", this.Value, this.Name);
public DOWeek Yesterday()
return ListOfDays.Single(dx => dx.Value == (Value-1-1+7)%7+1);
public DOWeek DayBeforeYesterday()
return ListOfDays.Single(dx => dx.Value == (Value-1-2+7)%7+1);
return ListOfDays.Single(dx => dx.Value == (Value-1+1)%7+1);
public DOWeek DayAfterTomorrow()
return ListOfDays.Single(dx => dx.Value == (Value-1+2)%7+1);
public static DOWeek operator + (DOWeek dayStart, int numofDays)
int n2 = (dayStart.Value -1 + numofDays) % 7 +1;
return ListOfDays.Single(dx => dx.Value == n2);
public static explicit operator int(DOWeek xday)
public static void InvalidOperation()
public enum DayOfWeek { Monday=1001, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
public static void TestBasic()
DayOfWeek daya = DayOfWeek.Thursday;
Console.WriteLine("(int)daya:{0}", (int)daya);
Console.WriteLine("daya:{0}", daya.ToString());
Console.WriteLine("daya:{0}", (daya-1).ToString());
DayOfWeek dayb = (DayOfWeek)DayOfWeek.Parse(typeof(DayOfWeek), "Friday");
Console.WriteLine("Parse succedded");
Console.WriteLine("dayb: {0}; (int)dayb:{1}", dayb, (int)dayb);
public static void TestEnumClass()
DOWeek dx = new DOWeek(5);
Console.WriteLine(dx.DayInfo());
Console.WriteLine("+ {0} days : {1}", 9, (dx+9).DayInfo() );
DOWeek dy = new DOWeek(2);
Console.WriteLine("+ {0} days : {1}", 9, (dx+9).DayInfo() );
Console.WriteLine("today: {0} ; -2,-1,1,2: {1},{2},{3},{4}", dy.DayInfo(), dy.DayBeforeYesterday().DayInfo(), dy.Yesterday().DayInfo(), dy.Tomorrow().DayInfo(), dx.DayAfterTomorrow().DayInfo());
DOWeek.InvalidOperation();
foreach(int i in Enumerable.Range(1,7))
DOWeek dyy = new DOWeek(i);
Console.WriteLine(dyy.DayInfo());
public static void Main()
Console.WriteLine("start");