亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#的編碼規范詳細說明

2020-01-24 03:11:03
字體:
來源:轉載
供稿:網友
首先我們要明白一下幾點,
1.代碼寫出來除了讓他跑起來還有個非常非常重要的作用是維護,因為沒有一成不變的代碼,需求變化代碼就不可避免的要變化。
2.你不是一個人在寫代碼,你身后有一個團隊,這個團隊中任何一個人都有可能會改你的代碼,你如果寫的不規范,后面的人會跟著寫。舉一個例子,最初的代碼可能是這樣的,
復制代碼 代碼如下:

if (OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-SP")
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e = ReGetFlight.GetDirectFlightHighWeightEntity(OrderInfo.O_FlightEntity, "", e.FlightAgency);
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    regetFlightInitData.TicketType = "0001";
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }
                else
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e.CostRate1 = 1.0M;
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }

但是過一時間又來個需求,對于“MU-WS”也需要走上面的邏輯,你會怎么寫,如果你只是完成任務可能會像下面這樣寫
復制代碼 代碼如下:

if (OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-SP" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-WS")
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e = ReGetFlight.GetDirectFlightHighWeightEntity(OrderInfo.O_FlightEntity, "", e.FlightAgency);
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    regetFlightInitData.TicketType = "0001";
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }
                else
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e.CostRate1 = 1.0M;
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }

如果真的這么寫你就是始作俑者,后面的人如果都和你一樣就都會朝著葫蘆畫瓢,最后代碼可能會是這樣的
復制代碼 代碼如下:

if (OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-SP" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-WS" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-WS" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-SP" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-WS" || OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "XT-WS")
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e = ReGetFlight.GetDirectFlightHighWeightEntity(OrderInfo.O_FlightEntity, "", e.FlightAgency);
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    regetFlightInitData.TicketType = "0001";
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }
                else
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e.CostRate1 = 1.0M;
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }

看到效果了么,你需要脫一下下面的那個長條才能看到全部代碼,這就是你的“因”種下后得到的果實。所以我們需要改進,常見的改進是回車換行,保證所有的代碼都在你一眼能夠看到的范圍之內。改進后代碼如下:
復制代碼 代碼如下:

if (OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-SP" ||
                    OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-WS" ||
                    OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-WS" ||
                    OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "MU-SP" ||
                    OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "CZ-WS" ||
                    OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper() == "XT-WS")
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e = ReGetFlight.GetDirectFlightHighWeightEntity(OrderInfo.O_FlightEntity, "", e.FlightAgency);
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    regetFlightInitData.TicketType = "0001";
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;
                }
                else
                {
                    OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                    e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                    e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                    e.CostRate1 = 1.0M;
                    regetFlightInitData.HighCostAndWeightEntity = e;
                    //如果是海航,則不需要政策倒查驗證
                    regetFlightInitData.ReSearchNoFlight = false;

是不是清爽一點,好看一點,如果你在第一次修改代碼的時候這樣寫后面的人就會跟著這樣寫,他們可能會想,前面一個人這樣寫這樣寫應該不會有問題,雖然代碼看起來有點別扭,這時候我們可以帶著鑒賞的眼光看這段代碼,如果再想一想還有更好的方法,為何不用switch呢?
復制代碼 代碼如下:

switch (OrderInfo.O_OrdersEntity.DirectFlightChannel.Trim().ToUpper())
                {
                    case "CZ-SP":
                    case "MU-SP":
                    case "XT-WS":
                        {
                            OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                            e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                            e = ReGetFlight.GetDirectFlightHighWeightEntity(OrderInfo.O_FlightEntity, "", e.FlightAgency);
                            e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                            regetFlightInitData.HighCostAndWeightEntity = e;
                            regetFlightInitData.TicketType = "0001";
                            //如果是海航,則不需要政策倒查驗證
                            regetFlightInitData.ReSearchNoFlight = false;
                            break;
                        }
                    default:
                        {
                            OrderCostAndWeightEntity e = new OrderCostAndWeightEntity();
                            e.Sendticketcity = int.Parse(ConfigurationManager.AppSettings["SendticketcityOfDirectFlights_HU"].ToString());
                            e.FlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(OrderInfo.O_OrdersEntity.DirectFlightChannel);
                            e.CostRate1 = 1.0M;
                            regetFlightInitData.HighCostAndWeightEntity = e;
                            //如果是海航,則不需要政策倒查驗證
                            regetFlightInitData.ReSearchNoFlight = false;
                            break;
                        }
                }

是不是更加簡單,如果你這樣寫,后面的人會毫不猶豫地在后面加一個case “”:因為這個是大家再熟悉不過的語法了,絲毫不用懷疑這種寫法的正確性,于是我們可以帶著欣賞的眼光來看這段代碼了。
3.要承認我們的心智就這么多,腦袋就這么大,我們既不能一目十行也不能出口成章,所以不要寫一言看不出什么意思的代碼。
以上的想法都是建立在維護別人代碼的痛苦,失落,沮喪,各種不爽,各種吐槽之上,所以代碼規范是需要我們時刻關注的,在這里自己總結一些規范,告誡自己不要做始作俑者。
1.一個文件中只放一個類,類名同文件名,不要在一個文件中寫好幾個類,這樣看的清楚。
2.不要在一個文件中寫多于1000行的代碼,除了那些比較大的實體類。其實我還想說超過500行看起來就有點累,但是在我們的系統中超過10000行的代碼比比皆是。
3.一個方法的代碼不要超過100行,其實我想說超過50行的方法看起來就有點累。但是在我們的系統中超過200行代碼的方法比比皆是。
4.存儲過程的代碼也不要超過100行,不要在存儲過程中寫過多的業務邏輯,那是找死,但是在我們的系統中我還真他媽的見過10000多行的存儲過程,好宏偉??!
5.避免寫超過5個參數的方法,如果有請使用一個類或者結構來傳。
6.一個方法只有一個return result; ,不要多次return結果,最好給返回結果賦值,最后return result;
7.不要給很簡單的代碼加注釋,會有噪音的,會讓人誤解的,因為你寫的大多數情況下很片面。
8.記錄日志的時候不要到處都記,有條件的情況下針對客戶一次操作(比如下單)只記錄一條日志。
另外再這里列舉自己對代碼做的一些改進,不足之處歡迎大家指出。
1.參數過長使用縮進
復制代碼 代碼如下:

a.
                    //獲得保險策略信息
                    insuranceStrategy = InsuranceCommon.GetStrategyInsurance(appFltEntity.ProductSource.ToString(), strategyFlightAgency.ToString(), "", appFltEntity.Price.ToString(), appFltEntity.DirectFlightChannel, appFltEntity.Airline.DibitCode, appFltEntity.Flight, appFltEntity.DepartAirport.Code, appFltEntity.ArriveAirport.Code, appFltEntity.SubClass, appFltEntity.DepartTime, appFltEntity.DepartTime.Date, null);
b.
                    //獲得保險策略信息
                    insuranceStrategy = InsuranceCommon.GetStrategyInsurance(appFltEntity.ProductSource.ToString(),
                                                                             strategyFlightAgency.ToString(),
                                                                             "",
                                                                             appFltEntity.Price.ToString(),
                                                                             appFltEntity.DirectFlightChannel,
                                                                             appFltEntity.Airline.DibitCode,
                                                                             appFltEntity.Flight,
                                                                             appFltEntity.DepartAirport.Code,
                                                                             appFltEntity.ArriveAirport.Code,
                                                                             appFltEntity.SubClass,
                                                                             appFltEntity.DepartTime,
                                                                             appFltEntity.DepartTime.Date,
                                                                             null);

2.if條件過長中使用縮進
復制代碼 代碼如下:

a.
                if (IsDirectFlight && (this.CorpPayType == ExpenseType.OWN || this.AccountInfo.DirectOrdersQuoteMode == "I"))
                {
                    strategyFlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(appFltEntity.DirectFlightChannel);
                    //根據票臺獲得票臺對應的城市
                    strategyCityID = InsuranceCommon.GetFlightAgencyCity(strategyFlightAgency);
                 }
b.
                if (IsDirectFlight &&
                    (this.CorpPayType == ExpenseType.OWN ||
                    this.AccountInfo.DirectOrdersQuoteMode == "I"))
                {
                    strategyFlightAgency = InsuranceCommon.GetStrategyFlightAgencyNew(appFltEntity.DirectFlightChannel);
                    //根據票臺獲得票臺對應的城市
                    strategyCityID = InsuranceCommon.GetFlightAgencyCity(strategyFlightAgency);
                 }

3.使用三元表達式
復制代碼 代碼如下:

a.
                        if (InsuranceInfoList != null && InsuranceInfoList.Count > 0 && InsuranceInfoList[0].GeneralDescription.Contains("e路泰康"))
                            collections.Set("IsElderCanBuyInsurance", "T");
                        else
                            collections.Set("IsElderCanBuyInsurance", "F");
b.
collections.Set("IsElderCanBuyInsurance", InsuranceInfoList != null && InsuranceInfoList.Count > 0 && InsuranceInfoList[0].GeneralDescription.Contains("e路泰康") ? "T" : "F");

4.使用藍不大表達式
復制代碼 代碼如下:

a.
                        InsuranceInfoList = InsuranceInfoList.FindAll(delegate(BookingInsuranceInfo iInfo)
                        {
                            return iInfo.TypeID == "C2C30";
                        });
b.
InsuranceInfoList = InsuranceInfoList.FindAll(a => a.TypeID == "C2C30");

5.使用switch表達式,見上面。
6.使用數組包含
復制代碼 代碼如下:

a.
            if (wsFlt.ProductSource == 4 && !string.IsNullOrEmpty(wsFlt.DirectFlightChannel) && (wsFlt.DirectFlightChannel.ToUpper() == "HO-WS" or wsFlt.DirectFlightChannel.ToUpper() == "ZH-WS" or wsFlt.DirectFlightChannel.ToUpper() == "XT-WS")
                && directFlightCorporationList != null && directFlightCorporationList.Count > 0 && !directFlightCorporationList.Contains(corporationid))
            {
                return false;
            }
b.
            if (wsFlt.ProductSource == 4 &&
                new List<string>() { "HO-WS", "CZ-WS", "XT-WS" }.Contains(wsFlt.DirectFlightChannel.Trim().ToUpper()) &&
                directFlightCorporationList != null &&
                directFlightCorporationList.Count > 0 &&
                !directFlightCorporationList.Contains(corporationid))
            {
                return false;
            }

可以看到代碼中也使用了縮進。
歡迎大家也列舉自己遇到的代碼簡潔之道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产另类 国产精品国产免费| 欧美精品在线免费| 久久精品国产久精国产思思| 欧美日韩国产精品一区二区不卡中文| 欧美孕妇性xx| 日本亚洲精品在线观看| 久久全国免费视频| 亚洲国内精品在线| 欧美国产日韩二区| 欧美高清理论片| 亚洲成av人影院在线观看| 日韩精品视频免费| 成人免费xxxxx在线观看| 欧美国产乱视频| 亚洲最新av在线| 欧美第一黄网免费网站| 久久国产精品影视| 亚洲欧美国产精品专区久久| 亚洲人成在线免费观看| 热久久这里只有精品| 欧美精品手机在线| 国产激情999| 韩国三级电影久久久久久| 国产精品一区二区久久| 欧美性极品xxxx做受| 一个人www欧美| 日韩av在线影院| 久久国产精品亚洲| 欲色天天网综合久久| 亚洲有声小说3d| 国产日本欧美视频| 中文字幕国产亚洲2019| 精品国产拍在线观看| 国产91网红主播在线观看| 欧美精品久久久久a| 欧美韩日一区二区| 国产精品99免视看9| 欧美一级在线亚洲天堂| 日韩视频在线免费观看| 欧美精品一本久久男人的天堂| 亚洲日韩中文字幕在线播放| 中文字幕日韩av| 欧美国产高跟鞋裸体秀xxxhd| 91久久久久久久久| 欧美性一区二区三区| 91情侣偷在线精品国产| 日韩中文字幕网址| 一本大道香蕉久在线播放29| 亚洲性夜色噜噜噜7777| 欧美日韩亚洲精品一区二区三区| 久久精品视频在线观看| 久久精品在线视频| 亚洲国产精品久久91精品| 狠狠干狠狠久久| 欧美另类第一页| 热re99久久精品国产66热| 久久99精品久久久久久噜噜| 一区二区三区动漫| 97久久久免费福利网址| 68精品久久久久久欧美| 国产精品99一区| 亚洲精品自拍偷拍| 久久国产精品久久久久| 色久欧美在线视频观看| 中文字幕精品在线视频| 欧美激情xxxx| 一区二区三区精品99久久| 欧美日韩亚洲一区二区| 国产精品久久久久久久久免费看| 国产精品福利小视频| 97超级碰碰碰久久久| 亚洲综合中文字幕68页| 久久久免费观看| 91av在线免费观看视频| 九九热视频这里只有精品| 北条麻妃久久精品| 国产精品视频白浆免费视频| 国产91色在线| 国产精品久久久久久影视| 欧美日韩亚洲国产一区| 久久久久久999| 亚洲精品久久视频| 成人妇女淫片aaaa视频| 欧美成在线观看| 欧美午夜片欧美片在线观看| 午夜伦理精品一区| 亚洲视频在线观看视频| 亚洲男子天堂网| 久久躁日日躁aaaaxxxx| 亚洲欧美日韩天堂| 国产丝袜一区二区| 国产精品欧美日韩一区二区| 欧洲亚洲在线视频| 国产成人精品一区二区三区| 欧美视频在线观看免费网址| 国产成人激情小视频| 丝袜一区二区三区| 国产精品69精品一区二区三区| …久久精品99久久香蕉国产| 久久成人这里只有精品| 日韩av最新在线观看| 欧日韩不卡在线视频| 中文字幕一区二区三区电影| 91精品在线观| 日韩精品极品毛片系列视频| 精品日韩中文字幕| 最近2019年手机中文字幕| 日韩欧美在线免费| 国产suv精品一区二区三区88区| 亚洲专区中文字幕| 国模私拍一区二区三区| 日韩经典一区二区三区| 国产综合视频在线观看| 91伊人影院在线播放| 国产一区二区香蕉| 欧美激情视频三区| 国产精品欧美风情| 欧美亚洲免费电影| 亚洲欧美国产视频| 亚洲综合在线做性| 69视频在线播放| 亚洲视频国产视频| 91免费精品视频| 亚洲精品自产拍| 久久视频国产精品免费视频在线| 日韩一区二区福利| 久久久久久国产精品| 国产精品一区二区久久久| 美女少妇精品视频| 91视频-88av| 亚洲国产成人av在线| 姬川优奈aav一区二区| 日韩在线视频观看| 91久久精品一区| 97精品视频在线播放| 欧美性受xxxx黑人猛交| 精品久久久久久中文字幕一区奶水| 日本午夜精品理论片a级appf发布| 亚洲精品狠狠操| 亚洲91精品在线观看| 欧美国产日韩一区| 78m国产成人精品视频| 中文字幕在线国产精品| 久久6免费高清热精品| 精品久久久久久亚洲国产300| 久久亚洲精品视频| 一本色道久久88精品综合| 日韩精品亚洲元码| 久久精品国产久精国产一老狼| 国产视频丨精品|在线观看| 欧美成人午夜激情| 日韩暖暖在线视频| 亚洲精品第一国产综合精品| 91嫩草在线视频| 欧美精品九九久久| 美女福利精品视频| 中文字幕一精品亚洲无线一区| 亚洲成成品网站| 欧美日韩国产一区中文午夜| 日韩av影院在线观看| 亚洲美女av在线播放| 亚洲欧美日韩一区二区三区在线| 成人精品网站在线观看| 久久精品国产96久久久香蕉|