我是Web API的新手,需要有关代码的帮助。
如果通过的日期是boolean
中列出的假日,或者是星期六或星期日,我想要返回GetHolidays
这是我的功能,我想检查特定日期是否是假日。
public bool IsHoliday(DateTime requesteddate)
{
HashSet<Holidays> holidays = new HashSet<Holidays>();
string sat = requesteddate.DayOfWeek.ToString();
string sun = requesteddate.DayOfWeek.ToString();
holidays = GetHolidays(requesteddate.Year);
return true;
}
这是我整年计算的假期的散列集,并且完美无缺
public HashSet<Holidays> GetHolidays(int year)
{
HashSet<Holidays> holidays = new HashSet<Holidays>();
// NEW YEARS
DateTime newYearsDate = AdjustForWeekendHoliday(new DateTime(year, 1, 1).Date);
holidays.Add(new Holidays(newYearsDate, "New Years Day"));
// MARTIN LUTHER KING, JR. DAY -- third Monday of January
DateTime martinLutherDay = new DateTime(year, 1, (from day in Enumerable.Range(1, 31) where new DateTime(year, 1, day).DayOfWeek == DayOfWeek.Monday select day).ElementAt(2));
holidays.Add(new Holidays(martinLutherDay, "Martin Luther King, Jr. Day"));
// PRESIDENT'S DAY -- third Monday of February
DateTime presidentsDay = new DateTime(year, 2, (from day in Enumerable.Range(1, 29) where new DateTime(year, 2, day).DayOfWeek == DayOfWeek.Monday select day).ElementAt(2));
holidays.Add(new Holidays(presidentsDay, "President's Day"));
// MEMORIAL DAY -- last monday in May
DateTime memorialDay = new DateTime(year, 5, 31);
DayOfWeek dayOfWeek = memorialDay.DayOfWeek;
while (dayOfWeek != DayOfWeek.Monday)
{
memorialDay = memorialDay.AddDays(-1);
dayOfWeek = memorialDay.DayOfWeek;
}
holidays.Add(new Holidays(memorialDay.Date, "Memorial Day"));
// INDEPENCENCE DAY
DateTime independenceDay = AdjustForWeekendHoliday(new DateTime(year, 7, 4).Date);
holidays.Add(new Holidays(independenceDay, "Independence Day"));
// LABOR DAY -- 1st Monday in September
DateTime laborDay = new DateTime(year, 9, 1);
dayOfWeek = laborDay.DayOfWeek;
while (dayOfWeek != DayOfWeek.Monday)
{
laborDay = laborDay.AddDays(1);
dayOfWeek = laborDay.DayOfWeek;
}
holidays.Add(new Holidays(laborDay.Date, "Labor Day"));
// VETERANS DAY
DateTime veteransDay = AdjustForWeekendHoliday(new DateTime(year, 11, 11).Date);
holidays.Add(new Holidays(veteransDay, "Veterans Day"));
// THANKSGIVING DAY - 4th Thursday in November
var thanksgiving = (from day in Enumerable.Range(1, 30) where new DateTime(year, 11, day).DayOfWeek == `DayOfWeek.Thursday select day).ElementAt(3);
DateTime thanksgivingDay = new DateTime(year, 11, thanksgiving);
holidays.Add(new Holidays(thanksgivingDay.Date, "Thanksgiving"));
// DAY AFTER THANKSGIVING DAY
DateTime dayAfterThankGiving = thanksgivingDay.AddDays(1);
holidays.Add(new Holidays(dayAfterThankGiving, "Day after Thanksgiving"));
// CHRISTMAS
DateTime christmasDay = AdjustForWeekendHoliday(new DateTime(year, 12, 25).Date, true);
holidays.Add(new Holidays(christmasDay, "Christmas"));
// CHRISTMAS EVE
DateTime christmasEve = christmasDay.AddDays(-1);
holidays.Add(new Holidays(christmasEve, "Christmas"));
return holidays;
}
以下是控制器中的IHTTP操作
[HttpGet]
public IHttpActionResult IsHoliday(DateTime requesteddate)
{
try
{
var isHoliday = _dateService.IsHoliday(requesteddate);
return Content(HttpStatusCode.OK, isHoliday);
}
catch (Exception exception)
{
return BadRequest(exception.Message);
}
}
答案 0 :(得分:1)
如果Holidays
类实现GetHashCode
和Equals
只是比较类的日期部分而不仅仅是检查Contains
将起作用:
var isHoliday = holidays.Contains(new Holidays(requesteddate, "fake"));
如果Holidays
类没有实现GetHashCode
和Equals
对(修复代码 - Why is it important to override GetHashCode when Equals method is overridden?),或者该类实际上比较了这两种方法中的所有字段而不是需要迭代所有项目并手动比较日期:
var isHoliday = holidays.Contains(h => h.Date == requesteddate);
我个人会使用Dictionary<DateTime, Holiday>
代替HashSet
,因为通过ContainsKey
按日期查找会更明显日期是否在集合中。
旁注:Holidays
是单个项目的非常奇怪的名称 - 通常是复数名词暗示集合。
答案 1 :(得分:0)
最后我这样做了......但是感谢您的帮助
linked_node<int> ptr = numbers.head;
cout << ptr->data << " ";
ptr = ptr->next;
cout << ptr->data << " ";
ptr = ptr->next;
cout << ptr->data << " ";
ptr = ptr->next;