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