程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用C#中的out關鍵字,用世界杯演繹

使用C#中的out關鍵字,用世界杯演繹

編輯:C#入門知識

今年的世界杯好看至極,充滿著故事性、戲劇性。無論你平常踢不踢球,也不管你是否懂球,你總能從中獲得些許的情感釋放。世界杯似乎超越了足球本身,成為世界各地人們的"情感總和",一場場比賽牽動著無數人的心,賽場內比賽的跌宕起伏,賽場外球迷的喜怒哀樂。

 

而我們自己的國家隊,似乎離世界杯的舞台漸行漸遠。也就在世界杯期間,在場上人數占優的情況下,居然輸給了默默無名的馬裡隊,讓人唏噓不已。於是慨歎:中國足球的天啥時亮啊?幾個球友一致認為:我們可以選擇不看中國隊的比賽!說雖然是這麼說,但總有一些人在內心默默期待著中國足球好起來的那天......

 

當操場上、公園裡、大街上、田地裡到處是踢球的孩子,當我們的周圍有足夠多可以踢球的場地,當為人父的我們帶著自己的孩子走上球場,當我們有大批專業的青少年教練來教孩子踢球,當學校、俱樂部、中國足協重視青少年培養並願意投入,當處在轉型期、被時代裹挾著向前的我們認識到物質和金錢不是全部,足球能帶來內心的快樂……到那時……跑題了,對了,本篇要體驗的是使用C#的out關鍵字,讓我想到這和足球比賽評選"本場最佳球員"頗為相似,就順著這個思路來。


比賽由場上球員來完成,還需要一個Bool類型的屬性IsBestPlayer,用來設置是否是最佳球員:

public class Player
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Position { get; set; } 
        public bool IsBestPlayer { get; set; }
    }

球員歸屬球隊,類型為int的ScoreCount屬性用來記錄進球數,用它來判斷哪個球隊贏得比賽:

public class Team
    {
        public Team()
        {
            Players = new List<Player>();
        }
      
        public int Id { get; set; }
        public string Name { get; set; }
        public int ScoreCount { get; set; }

        public List<Player>  Players { get; set; }
    }

我們需要一個方法,不僅可以判斷哪個Team贏得比賽,還需要評選出比賽的最佳球員,把這個最佳球員作為輸出參數:

static void WhoWinWorldCup(Team a, Team b, out string bestPlayer) 
        {
            if (a.ScoreCount > b.ScoreCount)
            {
                Console.WriteLine("恭喜{0}贏得了本屆世界杯~~",a.Name);
            }
            else
            {
                Console.WriteLine("恭喜{0}贏得了本屆世界杯~~", b.Name);
            }

            bestPlayer = LookForBestPlayer(a, b);
        }

LookForBestPlayer()方法用來獲取2個Team中的最佳球員:

static string LookForBestPlayer(Team a, Team b) 
        {
            string result = string.Empty;
            //把Team b的球員合並到Team a中去
            a.Players.AddRange(b.Players);

            foreach (var player in a.Players)
            {
                if (player.IsBestPlayer == false)
                {
                    continue;
                }
                else
                {
                    result = player.Name;
                    break;
                }
            }
            return result;
        }

最後,在客戶端,由央視足球解說員賀炜來為我們評說本場比賽。 賀炜的解說准確、專業,甚至帶上幾份哲學味道:

static void Main(string[] args)
        {
            Console.WriteLine("央視足球解說員賀炜:歡迎大家來到本屆世界杯的決賽現場~~");
            Console.WriteLine("央視足球解說員賀炜:決賽的2支隊伍是:");

            Team brazil = new Team()
            {
                Id = 1,
                Name = "巴西隊",
                Players = new List<Player>()
                {
                    new Player(){Id = 1, Name = "內馬爾", Position = "前鋒"},
                    new Player(){Id = 2, Name = "阿爾維斯", Position = "後衛"}
                }
            };

            Team germany = new Team()
            {
                Id = 2, 
                Name = "德國隊",
                Players = new List<Player>()
                {
                    new Player(){Id = 3, Name = "齊勒", Position = "前鋒"},
                    new Player(){Id = 4, Name = "拉姆", Position = "後衛"}
                }
            };

            Console.WriteLine("來自南美的{0}主場迎戰來自歐洲的勁旅{1}", brazil.Name, germany.Name);

            Console.WriteLine("在比賽的89分鐘,德國隊前鋒齊勒禁區外抽射死角,鎖定勝局~~");
            germany.Players[0].IsBestPlayer = true;
            germany.ScoreCount = 1;
            brazil.ScoreCount = 0;

            string best = string.Empty;
            WhoWinWorldCup(brazil, germany,out best);
            Console.WriteLine("本場比賽的最佳球員是:{0}", best);
            Console.WriteLine();
            Console.WriteLine("央視足球解說員賀炜:這是牽動人心的90分鐘。在這場比賽之後,總有一支球迷熱愛的球隊要離開,而這場比賽本身,將成為我們記憶中的永恆財富。等我們老去的時候,在壁爐旁抱著自己的孫子,一定會跟他們講起2014年,講起今晚的巴德大戰。");
            Console.ReadKey();
        }

運行:

 

out和ref:
● 相同的地方在於:傳遞的引用
● 不同之處在於:ref在使用之前需要賦上初值,out可以賦初值也可以不賦

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved