none
部分程式碼路徑並未傳回值? RRS feed

  • 問題

  • 程式碼如下:

    private static string GetFieldName(string ServerName, bool NextMonthQ)
            {
                int Month = DateTime.Today.Month;
                DateTime TheFirstDay = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1, 0, 0, 0);
                DateTime LastTradingDay;

                if ((int)TheFirstDay.DayOfWeek < 4)
                {
                    LastTradingDay = TheFirstDay.AddDays(17 - (int)TheFirstDay.DayOfWeek);
                }
                else
                {
                    LastTradingDay = TheFirstDay.AddDays(24 - (int)TheFirstDay.DayOfWeek);
                }

                switch (ServerName)
                {
                    case "XXX":
                        if (DateTime.Compare(LastTradingDay, DateTime.Today) >= 0)
                        {
                            if (NextMonthQ == false)
                            {
                                return "string1";
                            }
                            else
                            {
                                return "string2";
                            }
                        }
                        else
                        {
                            if (NextMonthQ == false)
                            {
                                return "string3";
                            }
                            else
                            {
                                return "string4";
                            }
                        }

                        break;

                    case "YYY":
                        if (DateTime.Compare(LastTradingDay, DateTime.Today) >= 0)
                        {
                            return "string5";
                        }
                        else
                        {
                            return "string6";
                        }

                        break;
                }
            }

     

    都有 return 字串了, 不知問題出在何處? 請大家幫忙看一下, 謝謝!

    2011年1月20日 上午 10:05

解答

  • 應該是少了 case else 吧.. (在C#稱為default的那玩意)

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 hyperon.tw 2011年1月20日 上午 10:28
    2011年1月20日 上午 10:14
    版主

所有回覆

  • 你的ServerName會不會出現XXX和YYY之外的可能呢?

    建議你用switch case的時候加個default:條件喔~

    希望以上內容對你有幫助~

     


    Ouch Liu
    2011年1月20日 上午 10:13
  • 應該是少了 case else 吧.. (在C#稱為default的那玩意)

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 hyperon.tw 2011年1月20日 上午 10:28
    2011年1月20日 上午 10:14
    版主
  • 原來是缺了這個(這幾天才開始用 C#, 不知道 default: 不可以省略), 謝謝!
    2011年1月20日 上午 10:31
  • 只有在 switch 中的 case 值域都固定,沒有任何額外的可能值時,才可以不用 default。
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    目前籌建雲端運算學堂 (studyazure.com) 中...
    2011年1月20日 下午 04:09
    版主
  • 雖然我不太了解 C# 的語法規則(這幾天只有在 MSDN Library 查詢了一些說明就動手寫程式了), 不過 default: 確實是不可以省略的(不管會不會發生 case else 的情形), 所以補上這個標記並傳回一個字串後, 編譯就沒問題了.
    2011年1月21日 上午 12:09
  • 如果你在 switch 用的是列舉型別的變數,而且所有列舉的數值都有 case 對應時,就可以不用 default。
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    目前籌建雲端運算學堂 (studyazure.com) 中...
    2011年1月21日 下午 05:24
    版主
  • 謝謝! 顯然 VS 的 IDE 功能做得很好, 不過我覺得編譯不給過有點太苛了(如果換成警告, 使用者就不用去找那也許"不存在的程式分支路徑", 到底哪裡漏掉 return 了), 現在使用者通常都會在可能出問題的地方 throw exception, 真的漏了傳回值也找得出來. 牢騷寫得有點多, 不過 VS 還是很好用......

    2011年1月22日 上午 03:47
  • Hi,

    警告應該很多開發人員會忽略不處理,這種見仁見智的議題開發上一定是遵循著大多數人的習慣或是較好的建議處理方式下去處理,以今天這個來看,當Function有可能會有露掉回傳的狀況,立即性的提醒能避免開發人員後續錯誤的找尋耗費,在開發的立場上也不該是假設使用者已經具備某些良好的習慣,不然一般在開發也不用防呆了不是嗎。


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年1月24日 上午 04:49