11. C#(解析)

发布: (2026年2月10日 GMT+8 04:07)
3 分钟阅读
原文: Dev.to

Source: Dev.to

本课的真正目标

本课的目标不是记住 int.Parse;真正的要点是理解 计算机永远不相信用户输入。解析是一个明确的、刻意的步骤,负责将字符串解释为特定类型。

  • Console.ReadLine() 始终返回字符串(永不抛出异常)。
  • 从计算机的角度来看,用户可能会输入:
    • 123
    • -5
    • ABC
    • 12.5
    • 什么都不输入(仅 Enter

由于编译器无法预测用户会输入什么,C# 做出了刻意的设计选择:不要猜测

int number = Console.ReadLine(); // 编译时错误

Console.ReadLine() 返回 string,而 number 需要 int;这违反了类型契约。编译器只关心类型,而不关心可能的运行时值。如果我们想把用户输入当作数字处理,必须 显式 地说明——这就是 解析

什么是解析?

解析是将字符串解释为另一种类型的行为:

  • "123"int 123
  • "true"bool true
  • "2026-01-01"DateTime

解析不是自动进行的;必须有意调用。

基本示例

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Enter a number:");

        var input = Console.ReadLine(); // always string
        int number = int.Parse(input); // string → int

        Console.WriteLine(number + 10);
    }
}

逐步推理

  1. 用户输入 5
  2. input 变为 "5"(一个字符串)。
  3. int.Parse("5") 产生 5(一个 int)。
  4. number + 10 的结果是 15

如果 int.Parse 无法解释该字符串(例如 int.Parse("ABC")),执行将在运行时失败(后续课程会涉及)。


为什么 C# 强制这一步

C# 的哲学是:“风险操作必须显式”。 将字符串转换为数字是有风险的,因为字符串可能:

  • 不代表数字。
  • 为空。
  • 格式错误。

因此,C# 拒绝猜测,要求开发者有意识地声明意图:

int number = int.Parse(input); // explicit conversion

常见误解

  • 错误思维方式:ReadLine() 可能返回数字,编译器应该自行判断。”
  • 正确思维方式: “用户输入始终是字符串。如果需要数字,必须显式解析。”

未解决的问题

int.Parse("ABC"); // Runtime failure

此错误发生在 运行时,而不是编译时。后续章节将介绍如何安全地处理此类情况:

  • TryParse
  • 异常处理
  • 防止运行时崩溃

记住:Console.ReadLine() 始终返回字符串。

0 浏览
Back to Blog

相关文章

阅读更多 »

什么是泛型?

Generics 是在 Java 5 中引入的一项功能,允许创建能够处理不同数据类型的类、接口和方法。它们消除……

特殊字符 | C++ 初学者

String 和特殊字符 Escape 符号用于在字符串或文本中编写特殊命令/字符。' ' – 在引号内部写入引号。

从 Zig 学到的经验

Zig 编程语言保持有意小的标准库。不符合严格收录标准的组件会被删除并重新定位……