通过


Python 开发者学习 C# 的路线图

如果要从 Python 迁移到 C# 以获取新角色或项目,本文可帮助你快速提高工作效率。 它突出显示了 Python 中熟悉的内容以及 C# 中的不同内容。

C# 和 Python 具备类似的概念。 如果你已经了解 Python,这些熟悉的构造可以帮助你学习 C#。

  1. 面向对象:Python 和 C# 都是面向对象的语言。 Python 中类的所有概念都适用于 C#,即使语法不同也适用。
  2. 跨平台:Python 和 C# 都是跨平台语言。 使用这两种语言中的任意一种编写的应用都可以在许多平台上运行。
  3. 垃圾回收:这两种语言都通过垃圾收集来应用自动内存管理功能。 运行时从不再被引用的对象中回收内存。
  4. 强类型化:Python 和 C# 都是强类型化语言。 类型强制不会隐式发生。 后面会介绍一些差异,因为 C# 是静态类型,而 Python 是动态类型。
  5. Async / Await:Python 的 asyncawait 功能直接受到 C# 的 asyncawait 支持的启发。
  6. 模式匹配:Python 的 表达式和模式匹配类似于 C# 的match 表达式。switch 可以使用这些功能来检查复杂数据表达式,以确定它是否与模式匹配。
  7. 语句关键字:Python 和 C# 有许多相同关键字,例如 ifelsewhilefor 等。 虽然并非所有语法都相同,但它们十分相似,如果你了解 Python,就可以阅读 C#。

语法一目了然

以下示例并排显示了一些常见模式。 这些比较并不详尽,但它们可让你快速了解语法差异。

类型批注:

# Python
name: str = "Hello"
count: int = 5
// C#
string name = "Hello";
int count = 5;

列表过滤(推导式与 LINQ):

# Python
result = [x for x in items if x > 5]
// C#
var result = items.Where(x => x > 5).ToList();

了解详细信息: LINQ 概述

块范围(缩进与大括号):

# Python
if count > 0:
    print("positive")
// C#
if (count > 0)
{
    Console.WriteLine("positive");
}

类定义:

# Python
class Point:
    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y
// C#
record Point(int X, int Y);

了解详细信息: 记录

主要差异

了解 C# 时,可发现以下重要概念,其中 C# 不同于 Python:

  1. 缩进与符号:在 Python 中,换行和缩进是基本的语法元素。 在 C# 中,空格并不重要。 标记,例如 ; 用于分隔语句,其他标记如 {} 用于控制 if 和其他块语句的块范围。 但是,为了便于阅读,大多数编码样式(包括这些文档中使用的样式)都使用缩进来强化 {}声明的块范围。
  2. 静态类型语言:在 C# 中,变量声明包括其类型。 将变量重新分配给不同类型的对象将生成编译器错误。 在 Python 中,在重新分配时,类型可能会发生更改。
  3. 可以为 null 的类型:C# 变量可为空不可为空。 不可为 null 的类型是不能为 null(或不包含任何值)的类型。 它始终需要引用有效的对象。 相比之下,可为空的类型可以引用有效对象或 null。
  4. LINQ:组成语言集成查询 (LINQ) 的查询表达式关键字与 Python 中的关键字不同。 但是,Python 库(如 itertoolsmore-itertoolspy-linq)具备类似的功能。
  5. 泛型:C# 泛型使用 C# 静态类型语言对类型参数提供的参数进行断言。 泛型算法可能需要指定参数类型必须满足的约束。

小窍门

若要详细了解 C# 的类型系统(包括 classstruct、泛型和接口),请访问“基础知识”部分中 的类型系统 概述。

最后,Python 的某些功能在 C# 中不可用:

  1. 结构化(鸭子)语言类型:在 C# 中,类型具有名称和声明。 除元组外,具有相同结构的类型不可互换。
  2. REPL:C# 不具备读取-求值-打印循环 (REPL),无法快速构建解决方案原型。
  3. 重要空格:需要正确使用大括号 {} 来表示代码块范围。

如果你了解 Python,那么 C# 的学习过程会很顺利。 这些语言具有相似的概念和相似的习语。

后续步骤