众所周知,Java和C#都源于C/C++,但除Java的JVM和C#的.NET CLR结构有一些相似之外,二者之间存在很大的差异,有很多功能是C#程序员在Java中无法使用的,比如语言集成查询(LINQ)、结构体(struct)、异步/等待、关键字等。

1、LINQ
LINQ执行查询操作的一般步骤为:获取数据库——创建查询——执行。在LINQ to Object查询中,不需要为每个循环编写复杂的嵌套迭代,执行步骤就像读取代码一样简单。LINQ依赖的诸如lambda许多特性都是有用的,Java中也可以实现。虽然我们可以使用stream和lambda来查询数据,但LINQ简化删除了Java中许多冗余部分。
2、struct
C#中的结构体类似于类。实际上,一个结构体可以被认为是一个“轻量级类”,因为它本身包含构造函数、常量、方法等等。结构体和类之间大的区别是结构是值类型,类是引用类型。在许多情况下,编写结构体可以节省内存、缩短释放时间,因此,用结构体代替类是一种非常不错的选择。
3、异步/等待
使用异步编程对应用程序访问Web和所有与UI相关的活动都非常重要。与以往的异步编程相比,async / await不仅保留了代码的逻辑结构,而且编译器会帮助执行许多工作。利用CompletableFutures可以在C#和Java中同时实现异步编程。但由于CompletableFutures太复杂不能与async / await关键字相匹配。
4、关键字
编程语言中的一些非常有用的功能,有时候并不是很显眼,比方说关键字。一些关键字比如as、Yield、var、Checked在C#中存在,Java中却没有。
5、工具
Java和C#之间还有多的区别,其中一些根植于Java和.NET框架中。这些区别导致了提供生产监视和错误跟踪的OverOps等工具在兼容性方面存在差异。OverOps向开发人员展示了整个调用堆栈中所有错误的完整源代码和变量状态,目前没有与.NET框架类似的功能。
