今年的世界杯好看至极,充满着故事性、戏剧性。无论你平常踢不踢球,也不管你是否懂球,你总能从中获得些许的情感释放。世界杯似乎超越了足球本身,成为世界各地人们的"情感总和",一场场比赛牵动着无数人的心,赛场内比赛的跌宕起伏,赛场外球迷的喜怒哀乐。

而我们自己的国家队,似乎离世界杯的舞台渐行渐远。也就在世界杯期间,在场上人数占优的情况下,居然输给了默默无名的马里队,让人唏嘘不已。于是慨叹:中国足球的天啥时亮啊?几个球友一致认为:我们可以选择不看中国队的比赛!说虽然是这么说,但总有一些人在内心默默期待着中国足球好起来的那天......

当操场上、公园里、大街上、田地里到处是踢球的孩子,当我们的周围有足够多可以踢球的场地,当为人父的我们带着自己的孩子走上球场,当我们有大批专业的青少年教练来教孩子踢球,当学校、俱乐部、中国足协重视青少年培养并愿意投入,当处在转型期、被时代裹挟着向前的我们认识到物质和金钱不是全部,足球能带来内心的快乐……到那时……跑题了,对了,本篇要体验的是使用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可以赋初值也可以不赋

使用C#中的out关键字,用世界杯演绎的更多相关文章

  1. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  2. 浅析Java中的final关键字(转载)

    自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...

  3. 关于Java中的transient关键字

    Java中的transient关键字是在序列化时候用的,如果用transient修饰变量,那么该变量不会被序列化. 下面的例子中创建了一个Student类,有三个成员变量:id,name,age.ag ...

  4. 关于Java中的final关键字

    Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...

  5. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  6. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  7. 深入理解Java中的final关键字

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  8. 浅析Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  9. PHP中面向对象的关键字

    php面向对象中常用的关键字有final.static.const (1)final: 1,final不能修饰成员属性 2,final只能修饰类和方法 作用: 使用final修饰的类不能被子类继承 使 ...

  10. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

随机推荐

  1. [转载]Visual Studio 各版本下载

    文件名称 文件大小 百度网盘下载 微软官方下载 Visual Studio 2015 Enterprise - 企业版 - 简体中文 3.89GB http://pan.baidu.com/s/1bn ...

  2. linux 101 hacks 5PS1

    PS1——默认提示符 看完这一章,我心里若干个卧槽.. 如下所示, 可以通过修改 Linux 下的默认提示符,使其更加实用.在下面的例子中,默认的 PS1的值是“ \s-\v\$”,显示出了 shel ...

  3. 【LOJ】#2056. 「TJOI / HEOI2016」序列

    题解 这个我们处理出来每一位能变化到的最大值和最小值,包括自身 然后我们发现 \(f[i] = max(f[i],f[j] + 1) (mx[j] <= a[i] && a[j] ...

  4. 8-5 Wine trading in Gergovia Gergovia的酒交易 uva11054

    等价转换思维题 题意: 直线上有n(2<=n<=100000)个等距的村庄  每个村庄要么买酒 要么卖酒  设第i个村庄对酒的需求量为ai  绝对值小于一千  其中ai大于0表示买酒   ...

  5. ThinPHP3.2中 addAll()批量插入数据

    thinkphp中model类的addAll()方法可以将数据同时添加到数据库中. 1 2 3 4 5 6 // 批量添加数据 (only MySQL) $user = M('user'); //ar ...

  6. Android中selector背景选择器

    http://blog.csdn.net/forsta/article/details/26148403 http://blog.csdn.net/wswqiang/article/details/6 ...

  7. 加密grub防止通过单用户模式破解root密码

    (1).CentOS6 1)产生加密密码 [root@CentOS6 ~]# grub-md5-crypt Password: Retype password: $1$QPduF0$FNhzDUPQP ...

  8. ceph journal操作

    查询ceph journal的地方 ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | grep osd_journal & ...

  9. OpenStack计费项目Cloudkitty系列详解(一)

    云计算是一种按需付费的服务模式,虽然OpenStack前期在计量方面走了些“弯路”,但现在的ceilometer.gnocchi.aodh.panko项目的稳步并进算是让其峰回路转.然而,目前来看Op ...

  10. CF1042C Array Product 分类讨论+贪心

    考虑有无负数(负数的个数为奇视作“有”,否则为“无”)和有无零 无负数无零,全部合并即可 无负数有零,那么把零合并起来,删掉零 有负数无零,把最大的负数找出来,删掉,合并剩余的数 有负数有零,把零和最 ...