博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#匿名委托和匿名方法使用小技巧
阅读量:6090 次
发布时间:2019-06-20

本文共 2227 字,大约阅读时间需要 7 分钟。

  卷首语:匿名委托实指匿名方法或Lambda表达式。

  昨晚有一个朋友给我出了一个问题:

  在如下代码中,怎样才能输出“Hello World”

1 if(---填入代码---) 2{ 3  Console.Write("Hello "); 4 } 5 else 6 {
7   Console.Write("World"); 8 }

  当然,他说也可以用Java做,但是只能用一句话搞定。

  因为本人比较喜欢.NET这边,所以首选C#试了一下。

  首先,我们很本能地想到,if-else语句块中只能执行到一个(除了在特定情况下使用线程或者使用“true)else if(^!)^!”来截断判断等等非常规方法)。所以,我们理所当然地想到:必须在执行if条件时将Hello输出。于是,我想到了匿名方法(注:参考(匿名方法 百度百科)(匿名委托 百度百科)(匿名方法(C#编程指南)))。

  于是,我编写了如下代码:

1 using System;  2  3 namespace HelloWorldOutPutTest1  4 {
5 // 定义委托 6 public delegate bool MyDelForTest1(); 7 8 public class Test1 9 {
10 private MyDelForTest1 _test1; // 声明委托变量 11 12 public static void Main(string[] args) 13 {
14 // 也可以使用如下写法 15        // if (new Test1() { _test1 = delegate() { Console.Write("Hello "); return false; } }._test1()) 16 if (new Test1() { _test1 = new MyDelForTest1(delegate() { Console.Write("Hello "); return false; } ) }._test1()) 17 {
18 Console.Write("Hello "); 19 } 20 else 21 {
22 Console.Write("World"); 23 } 24 } 25 } 26 }

  熟悉委托的朋友肯定对这种写法不陌生,这种写法是正确的,运用了匿名方法来实现,但是还是没哟一句话解决啊!?

  后来那位朋友告诉我他的写法:

1 using System;  2  3 namespace HelloWorldOutPutTest2  4 {
5 public class Test2 6 {
7 public static void Main(string[] args) 8 {
9 if (new Func
(() => { Console.Write("Hello "); return false; }).Invoke()) 10 {
11 Console.Write("Hello "); 12 } 13 else 14 {
15 Console.Write("World"); 16 } 17 } 18 } 19 }

  这下终于搞定了。使用了华丽的代码(注:参考(Func<(Of <(TResult>)>) 委托)(Lambda 表达式(C# 编程指南)))。

  C#这边OK了,Java如何呢?

  老师给了我们解决方案:

1 package HelloWorldOutPutTest3;  2  3 public class Test3 {
4 5 public static void main(String[] args) {
6 if(new Test3(){ public boolean test() { System.out.print("Hello ");return false;} }.test()) {
7 System.out.print("Hello "); 8 } 9 else {
10 System.out.println("world"); 11 } 12 } 13 }

  看来C#和Java语法差别还是挺大的……

转载地址:http://melwa.baihongyu.com/

你可能感兴趣的文章
使用excel 展现数据库内容
查看>>
C#方法拓展
查看>>
MySql.Data.dll的版本
查看>>
Linux系统磁盘管理
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
home.php
查看>>
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>