DayOfWeek - это просто перечисление от 0 до 6, поэтому с модульной арифметикой вы можете использовать разницу между вашей интересующей датой и целевым днем недели, чтобы вычислить количество дней, которое вы должны добавить.
Быстрыйпредупреждение, вам нужно учитывать часовой пояс интереса, когда вы спрашиваете, что означает «сегодня».Это означает разные вещи в зависимости от того, с какой стороны строки даты вы живете.
using System;
public class Program
{
public static DateTime NextDayForDay(DayOfWeek dayOfWeek, DateTime occurringAfter)
{
return occurringAfter.AddDays(((dayOfWeek - occurringAfter.DayOfWeek + 6) % 7)+1);
}
public static void Main()
{
for (int i=0; i < 7; i++)
{
for (int j=0; j < 7; j++)
{
DayOfWeek dayOfWeek = (DayOfWeek)(((int)DayOfWeek.Sunday + j) % 7);
DateTime test = DateTime.Today.AddDays(i);
Console.WriteLine($"{test}=>Next {dayOfWeek} is {NextDayForDay(dayOfWeek, test)}");
}
}
}
}