今年的世界杯好看至極,充滿著故事性、戲劇性。無論你平常踢不踢球,也不管你是否懂球,你總能從中獲得些許的情感釋放。世界杯似乎超越了足球本身,成為世界各地人們的"情感總和",一場場比賽牽動著無數人的心,賽場內比賽的跌宕起伏,賽場外球迷的喜怒哀樂。
而我們自己的國家隊,似乎離世界杯的舞台漸行漸遠。也就在世界杯期間,在場上人數占優的情況下,居然輸給了默默無名的馬裡隊,讓人唏噓不已。於是慨歎:中國足球的天啥時亮啊?幾個球友一致認為:我們可以選擇不看中國隊的比賽!說雖然是這麼說,但總有一些人在內心默默期待著中國足球好起來的那天......
當操場上、公園裡、大街上、田地裡到處是踢球的孩子,當我們的周圍有足夠多可以踢球的場地,當為人父的我們帶著自己的孩子走上球場,當我們有大批專業的青少年教練來教孩子踢球,當學校、俱樂部、中國足協重視青少年培養並願意投入,當處在轉型期、被時代裹挾著向前的我們認識到物質和金錢不是全部,足球能帶來內心的快樂……到那時……跑題了,對了,本篇要體驗的是使用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可以賦初值也可以不賦