C# 基于变量访问预格式化字符串

C# 基于变量访问预格式化字符串,c#,winforms,C#,Winforms,好的,我被要求做这个简单的程序,根据一周中的哪一天,一个变量被输出到一个文本框。现在的例子是时间表。 我做了一个变量类只是为了适应它 class Variables { public static string Monday = string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4 Computing", Environment.NewLine); public static str

好的,我被要求做这个简单的程序,根据一周中的哪一天,一个变量被输出到一个文本框。现在的例子是时间表。 我做了一个变量类只是为了适应它

class Variables
{
    public static string Monday = string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4 Computing", Environment.NewLine);
    public static string Tuesday = string.Format("Tuesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine);
    public static string Wednesday = string.Format("Wednesday's Timetable{0}P1 Science{0}P2 English{0}P3 Computing{0}P4 I.T", Environment.NewLine);
    public static string Thursday = string.Format("Thurday's Timetable{0}P1 Geography{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine);
    public static string Friday = string.Format("Friday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine);
}
所有这些都存储在表单的代码中

private void tblcustom_Click(object sender, EventArgs e)
    {
        string customdayofweek = customdatepicker.Value.DayOfWeek.ToString();


    }

    private void tbltoday_Click(object sender, EventArgs e)
    {
        string dayofweektoday = DateTime.Today.DayOfWeek.ToString();

        outputtbl.Text = Variables. "Whatever the day of the week is"

    }
问题是,我不必做大量的if语句,是否有一种方法可以这样做,无论选择了星期几还是今天,它都会显示变量

我希望这是清楚的,我似乎不能找到它在互联网上,以及我真的不知道我在寻找什么,这就是为什么我在这里

提前谢谢


Kieran

在不改变太多代码的情况下,最好的方法是将静态字符串更改为字典。 然后,您可以这样做:

outputtbl.Text = Variables.YourDictionary[dayofweektoday];

在不改变太多代码的情况下,最好的方法是将静态字符串更改为字典。 然后,您可以这样做:

outputtbl.Text = Variables.YourDictionary[dayofweektoday];

使用数组,而不是使用多个变量,如下所示:

string[] timetable = {
          string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4  Computing", Environment.NewLine), 
          string.Format("Tuesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine),
          ...};

然后您可以使用时间表[intDateTime.Today.DayOfWeek]来选择时间表

使用数组而不是使用多个变量,如下所示:

string[] timetable = {
          string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4  Computing", Environment.NewLine), 
          string.Format("Tuesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine),
          ...};

然后您可以使用时间表[intDateTime.Today.DayOfWeek]来选择时间表

使用字典存储DayOfWeek和字符串之间的关系

class Variables
{
    Dictionary<DayOfWeek, string> DayText = new Dictionary<DayOfWeek, string>()
    {
       {DayOfWeek.Monday, string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4 Computing", Environment.NewLine)},
       {DayOfWeek.Tuesday, string.Format("Tuesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Wednesday, string.Format("Wednesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Thursday, string.Format("Thursday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Friday , string.Format("Friday 's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
    };    

}

使用字典存储DayOfWeek和字符串之间的关系

class Variables
{
    Dictionary<DayOfWeek, string> DayText = new Dictionary<DayOfWeek, string>()
    {
       {DayOfWeek.Monday, string.Format("Monday's Timetable{0}P1 English{0}P2 Maths{0}P3 History{0}P4 Computing", Environment.NewLine)},
       {DayOfWeek.Tuesday, string.Format("Tuesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Wednesday, string.Format("Wednesday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Thursday, string.Format("Thursday's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
       {DayOfWeek.Friday , string.Format("Friday 's Timetable{0}P1 Science{0}P2 Geography{0}P3 History{0}P4 Maths", Environment.NewLine)},
    };    

}

借用WinC的概念,我用Winforms编写了一个示例代码块。此示例将从变量中提取星期几的静态字符串属性。您需要的唯一使用语句是使用系统


借用WinC的概念,我用Winforms编写了一个示例代码块。此示例将从变量中提取星期几的静态字符串属性。您需要的唯一使用语句是使用系统



@MitchWheat如果dayofweek==monday output.text=varables.monday它将执行dayofweektoday中包含的任何操作,如果这样做有意义的话。重写:是否有其他方法可以在不使用7 if-else语句的情况下提取相关的一周中的详细信息,如,从字典或其他地方输入。似乎您需要一个合适的数据模型。一个类,它包含DayOfWeek的一个实例作为属性,以及一个列表或可用于构建时间表的内容。下面的四个答案都是很好的解决问题的不同方法。以下所有答案不包括星期六或星期天,因为您的示例没有包括星期六或星期天,因此,您应该添加逻辑来处理您使用的解决方案未涵盖的天数。@MitchWheat如果dayofweek==monday output.text=varables,那么我就不需要这样做了。monday它将执行dayofweektoday中包含的任何操作,如果这样做有意义的话。请重新编写:是否有其他方法可以在没有7 if else的情况下提取相关的星期几细节语句,例如,从字典或其他地方键入。似乎需要一个合适的数据模型。一个类,它包含DayOfWeek的一个实例作为属性,以及一个列表或可用于构建时间表的内容。下面的四个答案都是很好的解决问题的不同方法。以下所有答案都不包括星期六或星期天,因为您的示例没有包括星期六或星期天,所以您应该添加逻辑来处理您使用的解决方案未涵盖的日期。您将其更改为字典是什么意思,只是c对我来说很新:@user3215561所以请查找c中的字典是什么。。。创建如下字段:公共静态字典时间表;然后,在静态构造函数中,您可以实例化并填充这个字典:“Timetables=newdictionary;时间表.AddMonday,周一的时间表{0}`或者更好,使用字典你把它改成字典是什么意思,只是c对我来说很新:@user3215561所以查一下c中的字典是什么。。。创建如下字段:公共静态字典时间表;然后,在静态构造函数中,您可以实例化并填充这个字典:“Timetables=newdictionary;时间表.AddMonday,周一的时间表{0}`或者更好的是,使用字典如果日历上说周一我更新了我的答案,那么我如何从中提取周一时间表呢。当您将DayOfWeek转换为整数时,它将给出正确的数字。你可以在这里读到更多:如果日历上说星期一我更新了我的答案,那么我将如何取消星期一的时间表。当您将DayOfWeek转换为整数时,它将给出正确的数字。你可以在这里读到更多:虽然这会起作用,但请不要使用它。使用字典/数组的方法要干净得多。我不确定我是否理解@JoeStead;学习使用反射是一件好事。同意学习如何使用反射是一件好事,鉴于海报仍在掌握基本知识,你不认为这是一件好事吗
有点无关紧要?如果可能的话,应该避免反射,在这种情况下也是可以的。我完全同意你的看法。虽然这会起作用,但请不要使用它。使用字典/数组的方法要干净得多。我不确定我是否理解@JoeStead;学习使用反射是一件好事。我同意学习如何使用反射是一件好事,鉴于海报仍在掌握基本知识,你不认为这有点无关紧要吗?如果可能的话,应该避免反射,在这种情况下也是可以的。我完全同意你的意见。