如何在表达式块中执行switch case或string格式

时间:2017-07-12 20:41:27

标签: c# switch-statement string-formatting

如何在表达式主体中实现switch case(或类似效果)?我正在创建一个Model对象(让我们称之为MyModel),其中一个字段是一个重复字段。重复发生的基础是当周的当天(周一的例子如下)。基本上我想将Weekly____设为真。我也在想,潜在的String.Format()会有一些东西可以支持它,但我无法让它工作。

public partial class SampleEntity
{
    public int MyId { get; set; }
    public string Description { get; set; }

    public SampleEntity()
    {
        this.SuperCollection = new HashSet<UnitCompany>();
    }

    public virtual ICollection<AnyOtherEntity> SuperCollection { get; set; }
}

我尝试切换案例

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

我尝试使用String.Format()

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

2 个答案:

答案 0 :(得分:2)

我猜你是C#的新手吗?

你需要做的是这样的事情

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

在您的两次尝试中,您实际上并未将该值分配给该属性。您的代码将无法编译,因为它无效C#。你不需要一个开关或一个字符串。格式来实现你所追求的目标。

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

答案 1 :(得分:1)

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

这样,无论什么时候实例化这个类,它都会自动设置当天为真,这就是你需要做的全部。

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