如何在表达式块中执行 switch case 或字符串格式

How to do a switch case or string format within an expression block

如何在表达式主体中实现 switch case(或类似效果)?我正在创建一个模型对象(我们称之为 MyModel),其中一个字段是重复字段。重复基于一周中的当前日期(下面是星期一的示例)。基本上我想将 Weekly____ 设置为 true。我也在想 String.Format() 可能会有一些东西来支持这个,但我无法让它工作。

var my = new MyModel
{
    Recurrence = new RecurrenceModel
    {
        WeeklyMonday = true //what it would be on a Monday
    }
};

我对 switch case 的尝试

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
    }
};

我猜您是 C# 的新手?

你需要做的是这样的

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

在您的两次尝试中,您实际上并未将值分配给 属性。您的代码将无法编译,因为它不是有效的 C#。您不需要开关或 string.Format 来实现您想要的。

在我的示例中,我将 DateTime.Today.DayOfWeek == DayOfWeek.Monday 的结果分配给模型 WeeklyMonday 属性 class

simonlchilds 是对的。执行此操作的最佳方法是在 class 的构造函数中评估当前日期的值以将 属性 设置为 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; }
}

这样,无论什么时候 class 被实例化,它都会自动将哪一天设置为 true,这就是您需要做的所有事情。

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