zl程序教程

您现在的位置是:首页 >  其他

当前栏目

跟if和switch说再见

2023-02-19 12:29:31 时间

我们在编写程序的时候经常用到条件判断,不是IF就Switch。有时候一个判断多就会觉得麻烦和看起来不舒服。最近在搞一个项目,就是这样太多的判断,个人觉得不是爽。于是就另辟新径尝试一下,我们就以一个简单的星期判断来讲解一下吧。首先如果用IF进行判断。。

public static string GetChineseWeek(string Week)
{
    string ret="星期六";
    if(Week.IndexOf("Sunday") >= 0)  ret="星期日";
    if(Week.IndexOf("Monday") >= 0)  ret="星期一";
    if(Week.IndexOf("Tuesday") >= 0) ret="星期二";
    if(Week.IndexOf("Wednesday") >= 0) ret="星期三";
    if(Week.IndexOf("Tuesday") >= 0) ret="星期四";
    if(Week.IndexOf("Friday") >= 0) ret="星期五";        
    return ret ;
}

好,这个就是if当然你可以说elseif更为容易理解,但我个人不喜欢elseif咯。。好吧我们上switch

public static string GetChineseWeek(string Week)
{
 string string.Format("星期{1}", "六");
 switch (Week){
  case "Sunday":
    ret=string.Format("星期{1}", "日");
  break;
  case "Monday":
    ret = string.Format("星期{1}", "一");
  break;
  case "Tuesday":
    ret= string.Format("星期{1}", "二");
  break;
  case "Wednesday":
    ret = string.Format("星期{1}", "三");
  break;
  case "Thursday":
    ret = string.Format("星期{1}", "四");
  break;
  case "Friday":
    ret = string.Format("星期{1}", "五");
  break;
 }
 return ret;
}

这个就是switch直观一点点吧,但忘记一个括号就麻烦了。好接下来就是我们的秘技。。

 private static Dictionary<string, Func<string>> GetChineseWeek= new Dictionary<string, Func<string>>
 {
            {"Sunday", ()=>{ return "星期日";} },
            {"Monday", ()=>{ return "星期一";} },
            {"Tuesday", ()=>{ return "星期二";} },
            {"Wednesday", ()=>{ return "星期三";} },
            {"Thursday", ()=>{ return "星期四";} },
            {"Friday", ()=>{ return "星期五";} },
            {"Saturday", ()=>{ return "星期六";} }
};

对,我们就用了之前讲的Dictionary,想不到Dictionary还可以这样用,不过要注意的就是调用方法需要:

GetChineseWeek[DateTime.Now.DayOfWeek.ToString()]()

这样就可以了。。当然你说那个更优更好,这个就看选择了,最后一个比较优雅一点,而IF和SWITCH则用的比较广和烂,基本会编程的看一下都知道和了解。

最后,再上一个JS那边优雅的

const day = "tuesday";
let dayValue = 0;
const values = {
   monday:0,
   tuesday: 1,
   wednesday:2
   thursday: 3,
   friday: 4,
   saturday: 5
   sunday: 6
 };
 dayValue = values [day] ?? -1; //??空值合并操作符
 console.log(dayValue);

上面的是js的方式,感觉比C#优雅一点。不过算,暂时这样了,新的一年新开启新的片章。。