ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C#零基础入门:手把手创建并运行第一个程序

C#零基础入门:手把手创建并运行第一个程序 我做 C# 开发这些年带过不少从零开始学编程的朋友发现一个很反直觉的现象真正拦住新人的往往不是语法和算法而是“程序到底是怎么被创建出来的”这个过程。很多教程默认你已经会用开发工具上来就贴代码结果初学者连“新建项目”都不敢点生怕选错模板导致后面全部白做。这篇教程我从最原始的问题讲起带你从空白环境开始一步步创建出第一个能运行的 C# 程序。把工具怎么选、项目怎么建、代码入口在哪、报错怎么查这些基础问题一次讲透看完你就能独立走通“写代码—编译—运行—改错”的完整闭环。1. 动手前的环境选择题别让工具选型卡住你的第一步C# 程序要跑起来硬件上只需要一台装了 Windows 或者 macOS 的电脑。但软件层面的组合方式至少有三种纯命令行、轻量编辑器、完整 IDE。很多新手在网上搜教程搜到什么用什么结果环境五花八门连代码都跑到一半就卡住。这里我先把环境这条路给你理清楚。1.1 官方工具链的基本组成C# 程序本质上 是给 .NET 运行时和编译器吃的源代码。你至少要装两样东西.NET SDK 和一个编辑代码的工具。.NET SDK包含编译器、运行时、基础类库。没有它你写多少代码都变不成可执行程序。编辑代码的工具可以是记事本、VS Code、Visual Studio 或者其他任何能编辑文本文件的工具。SDK 相当于发动机编辑器相当于方向盘。发动机决定了车能不能跑方向盘决定了你开着舒不舒服。两者缺一不可但对新手来说方向盘的选择直接影响学习体验。1.2 三个主流方案对比纯命令行、VS Code、Visual Studio我在带新人时最常看到的三种环境组合给你列个直观对比方案工具组合适合人群上手难度我的推荐度纯命令行.NET SDK 记事本已经懂命令行原理的开发者中高不推荐入门轻量编辑器.NET SDK VS Code想保持环境轻量、愿意配置的人中有条件地推荐完整 IDEVisual Studio 社区版初学者、Windows 用户低最推荐入门纯命令行方案对新手不友好倒不是因为它“功能少”而是因为你要在没有任何提示的情况下记下大量命令。比如dotnet new console创建项目、dotnet build编译、dotnet run运行。一旦代码出现语法错误命令行只给你一行冷冰冰的报错你连在哪一行出错都得去文件里翻。这种模式适合已经理解“编译—运行”本质的人不适合刚接触编程的同学。VS Code 方案的特点是轻量、启动快、跨平台。装好 C# 扩展之后写代码有语法高亮和自动补全体验比记事本好了不少。但它的坑在于配置过程你要自己管理扩展、SDK 路径、调试配置。2024 年之后微软主推的 C# Dev Kit 扩展虽然改善了体验但整体来说对一个只想先学会写程序的初学者这些配置成本属于“没必要背的包袱”。1.3 为什么入门阶段我推荐 Visual Studio 社区版Visual Studio 社区版是微软官方的免费 IDE功能比 VS Code 完整很多。它对入门者有四个特别友好的设计全部图形化操作新建项目、运行调试、查看错误都是用鼠标点一点就能完成。集成的调试器代码某一行出错它在代码左侧标出红点鼠标悬停还能看到变量的实时值。这对理解程序执行过程帮助非常大。智能提示更完善输入Console.会自动弹出所有可用的方法名你不需要死记 API。错误列表窗口编译错误会集中显示在“错误列表”里双击某一条光标直接跳到出错的那一行。社区版唯一的门槛是首次安装体积大大概需要 4-8 GB 磁盘空间。但为了入门阶段少走弯路这个成本值得付。有很多人纠结“用 VS Code 是不是显得更专业”我劝你别有这个包袱。工具是拿来用的不是拿来炫耀的。等你理解了 C# 的机制再切换到任何工具都很简单。1.4 安装时最容易忽略的两个细节安装 Visual Studio 时选择“工作负载”这一步很多新人容易手滑跳过。如果你是做纯 C# 控制台程序入门至少要勾选.NET 桌面开发使用 .NET 的 ASP.NET 和 Web 开发如果你以后想写网页后端可以一并勾上纯入门可以先不勾节省空间另外安装完成后首次启动会提示登录微软账号。这一步可以点“暂时跳过”不一定非要登录才能用。如果你在公司的电脑上装可能还会遇到代理、内网限制等问题那就需要管理员权限提前跟 IT 部门打个招呼。2. 从“新建项目”到第一行代码Visual Studio 2022 实操全流程环境装完接下来就是整个教程的核心环节——创建一个真正的 C# 项目。我会以 Visual Studio 2022 社区版为例把所有点击路径写清楚。你只要按顺序跟着做一定能看到自己的程序跑起来。2.1 新建项目模板别选成 .NET Framework 版本启动 Visual Studio 后你看到的第一屏通常有“创建新项目”选项。点击之后进入模板选择界面。这里有大量模板很多新手第一眼就晕了不知道控制台应用和类库有什么区别。这里我只说入门要选的模板找到一个叫“控制台应用”的模板注意它的目标框架通常显示为.NET 8.0或更新的 .NET 版本。千万不要选“控制台应用.NET Framework”。这个旧版本已经过时主要用于维护老项目。如果你选了它会出现很多与新版 .NET 不兼容的坑比如包引用方式不一样、API 缺失新手根本分不清是代码问题还是框架问题。选模板时留意列表里的蓝色标签或者看模板描述中的“跨平台”三个字。新版控制台应用模板会标记为跨平台Windows / macOS / Linux 都能跑.NET Framework 模板则只标 Windows。2.2 项目名称、位置和解决方案名称怎么填写点击“下一步”之后会要求填写项目名称和位置。这里有几个容易被忽视的规矩项目名称建议只包含字母、数字和下划线不要用中文、空格和特殊符号。虽然新版可以支持中文项目名但后续在命令行编译、或者引入某些第三方库时中文路径和空格经常制造路径解析问题。我见过不止一个同学因为项目名带空格导致 NuGet 包还原失败。先建一个专门的代码目录比如D:\CSharpProjects把所有项目都放这里。不要散落在桌面或者下载文件夹里否则等你要清理磁盘时分不清哪些是项目文件。“解决方案名称”默认和项目名称一样可以保持不变。解决方案是一个容器可以放多个项目。你暂时只写一个项目不需要改。填完这些之后Visual Studio 会自动生成一个项目并打开一个叫Program.cs的文件。此时你已经成功创建了一个 C# 程序只是它还没做任何有用的事。2.3 首次打开项目后先认识这几个窗口项目创建成功后界面看起来信息量很大。但你别慌只需要重点关注三个区域代码编辑区最大的白色区域。所有 C# 代码都写在这里。解决方案资源管理器通常在右侧显示项目的文件结构。你会看到.csproj文件和Program.cs。其中.csproj是项目配置文件Program.cs是主代码文件。输出窗口 / 错误列表通常在下方运行程序时控制台输出会显示在“输出”窗口里编译出错时错误信息会出现在“错误列表”里。我见过很多新人把“输出窗口”当成了“控制台窗口”这是很常见的误判。控制台窗口是你程序真正运行的黑框框而输出窗口是 IDE 显示编译日志的地方。两者不是一回事。后面你运行程序时会同时看到它们。2.4 运行一次试试F5 与 CtrlF5 的差别在正式写复杂代码之前先跑一次默认程序。Visual Studio 提供两个常用快捷键F5调试运行。程序跑起来后如果有异常会自动停在出错的代码行上。CtrlF5不调试运行。程序跑完控制台窗口会一直保留显示结果直到你按任意键关闭。对刚入门的朋友我建议用CtrlF5运行至少前几周都用这个。因为 F5 模式一旦程序正常结束控制台窗口会自动关闭你根本来不及看清输出内容容易误以为程序没跑起来。默认模板生成的代码只有一行Console.WriteLine(Hello, World!);按下 CtrlF5 后一个黑底白字的窗口会弹出来显示Hello, World!。到这一步你已经完成了一个 C# 程序的完整创建流程。接下来该做的事是把这一行代码弄明白而不是急着把它改成别的。3. 逐行拆解自动生成的代码先搞懂“入口”再跑远路很多教程到这里会直接带你去学变量、循环、对象而对Program.cs里那几行“模板代码”只字不提。但这里恰恰藏着新手理解程序运行机制的关键。我把自动生成的代码拆成三段讲清楚。3.1 精简模板和完整入口方法顶级语句是什么在 .NET 6 之后新建控制台项目的Program.cs默认是精简版Console.WriteLine(Hello, World!);看起来只有一行实际上编译器在背后为你生成了一个类和一个Main方法。Main方法是每一个控制台程序的入口点。程序启动时操作系统会通知 .NET 运行时“我要运行这个程序了”运行时第一件事就是找到Main方法然后从它的第一行代码开始逐句执行。为了不吓唬新手新模板采用了“顶级语句”语法——编译器自动把顶层代码包进一个Main方法里。传统写法长这样using System; namespace MyFirstApp { internal class Program { static void Main(string[] args) { Console.WriteLine(Hello, World!); } } }两种写法在功能上没有区别。新手看传统写法会觉得“好多看不懂的关键字”但顶级语句只需要记住最外层的代码就是程序启动后要执行的第一段代码。等你理解了变量、分支、循环之后再回头学习class、Main、static这些关键字会顺理成章得多。3.2 Console 类与 WriteLine 方法点号和括号意味着什么Console.WriteLine(Hello, World!);这一行的结构非常典型它拆开看是四部分Console一个类名代表控制台窗口。它封装了很多跟控制台打交道的能力。.成员访问符。意思是“Console 里面的”。WriteLine一个方法。它的作用是把括号里的内容输出到控制台并在末尾换行。;Hello, World!字符串参数也就是你要输出的内容。末尾的分号表示这句话结束。如果用生活场景类比Console是电视机WriteLine是遥控器上的“显示字幕”按钮括号里的内容是字幕文字分号是按下按钮的动作。少了哪个部分指令都执行不完整。和WriteLine对应的还有一个Write方法区别就是写完不换行。新手可以先不管这个细节但你要知道知识点之间存在这种对照关系后面遇到输出格式不对时回头找这个区别就行。3.3 注释给未来的自己留纸条在Program.cs最上方默认可能有一段注释// See https://aka.ms/new-console-template for more information//是单行注释的写法。注释里的内容不会被编译器执行纯粹是给人看的说明。我刚学 C# 时有个坏习惯从不写注释觉得那是浪费时间。后来维护自己几个月前的代码完全想不起当时为什么要写某段逻辑才意识到注释是给“未来的自己”留的备忘录。初学者可以在每次学会一个新知识点时用中文注释在代码里写上自己的理解比如// 输出一行文字到控制台 Console.WriteLine(Hello, World!);这样复习代码时你能一眼看出当时的思路。3.4 在 Program.cs 里练习修改大胆改改坏了重写就行很多初学者不敢动自动生成的代码怕“改坏”。事实上C# 项目的代码文件只是纯文本文件改成什么样都不会弄坏电脑最多是程序运行报错。你应该做的是把Hello, World!改成自己的名字再点一次 CtrlF5观察控制台输出的变化。这个简单的操作能让你直观地理解“源代码 → 编译 → 运行”链路中每一步的作用。改错的时候IDE 会在代码行左侧显示红色波浪线告诉你“这行有问题”。这是极好的反馈机制别害怕它它是帮你纠错的助手。4. 从 Hello World 到真正交互给程序加入输入、变量和计算打印固定文本的程序严格来说还算不上“用程序解决问题”。真正让程序有价值的是它能接收用户输入、处理数据、输出结果。这一节我们做三个小练习把“输入—处理—输出”这个核心链路走通。4.1 第一次读取输入Console.ReadLine 的基本用法Console.ReadLine()是控制台程序接收用户输入的方法。它会让程序暂停等待你在控制台窗口里输入一行内容并按下回车然后把输入的内容作为字符串返回给你。试着把Program.cs改成这样Console.WriteLine(请输入你的名字); string? name Console.ReadLine(); Console.WriteLine(你好 name);这里出现了一个新东西string? name。中文读法是“声明一个名为 name 的字符串类型变量”。string表示文本类型?表示这个变量可以为空用户可能直接按回车没输入内容name是变量名。第 3 行的你好 name用加号把两个字符串拼接在一起。很多人看到加号会直觉想“字符串相加是什么运算”其实就是把两段文本首尾相连。这段代码运行流程是先提示输入然后等着你打字输入完回车最后输出问候语。这里有一个新手必踩的坑name变量名不能改成Name随便用C# 对大小写敏感。你声明的是name后面写Name编译器会直接报错“当前上下文中不存在名称 Name”。遇到这种错别慌它其实是在告诉你代码里引用的某个名字在前文里没有定义过。4.2 变量不是盒子是带类型的安全抽屉刚才用到了string类型变量。再来看一个带计算的例子int age 18; int nextYearAge age 1; Console.WriteLine($明年你 {nextYearAge} 岁);int表示整数类型。如果你尝试写int age 18;编译器会报错无法将类型“string”隐式转换为“int”。这个报错对新手不友好但它背后的逻辑其实很简单int这个“抽屉”只能放整数你却往里塞了一段文本编译器一眼就看出不对。用“抽屉”来理解变量其实不精准。变量更像一个带标签的安全抽屉标签上写着类型。不同类型的抽屉不能混放物品。这种设计在入门阶段看起来挺啰嗦但当你写的程序越来越复杂时它能帮你提前发现很多错误省去在运行时才暴露问题的麻烦。4.3 字符串插值比加号拼接更优雅的写法上面例子中我用了$明年你 {nextYearAge} 岁这是字符串插值语法。在字符串前加$字符串里的{变量名}会被替换成对应变量的值。和加号拼接相比string message1 明年你 nextYearAge 岁; string message2 $明年你 {nextYearAge} 岁;第二种写法更直观你一眼能看到输出的整体结构。字符串插值还有个附加好处在{}中可以写表达式比如{age 1}程序会先计算再替换。这在输出计算结果时非常好用。4.4 完整练习写一个两数相加的计算器接下来把前面知识点串起来做一个最基础的计算器。目标接收用户输入的两个整数输出它们的和。Console.WriteLine(请输入第一个整数); string? input1 Console.ReadLine(); int num1 int.Parse(input1); Console.WriteLine(请输入第二个整数); string? input2 Console.ReadLine(); int num2 int.Parse(input2); int sum num1 num2; Console.WriteLine(${num1} {num2} {sum});这里出现了两个新东西int.Parse(...)把字符串内容解析成整数。比如字符串18会被转成数字18。Convert.ToInt32(...)另一个更灵活的转换方法但它内部会先处理空值对初学者来说容易掩盖错误所以我暂时建议你用int.Parse它能更早暴露输入不合法的问题。如果你运行时输入了非数字内容比如输入abc程序会抛出一个FormatException异常并停止运行。这个异常是第 5 节要讲的重点先记住一点这是运行时错误不是编译错误。它说明代码本身语法正确但在运行到int.Parse这一步时手里拿到的东西不是你预期的东西。你可以再做两个小变形练习把两个数相乘观察运算优先级。把整数改成double双精度浮点数实现除法观察输出结果是否带小数。做这些练习的目的不是学运算而是熟悉“改代码→跑程序→看输出→再改”的循环节奏。编程能力就是在这样的循环里慢慢长出来的。5. 第一次遇到报错怎么办三个阶段的报错排查思路没有不报错的程序员只有“看不懂报错”和“能看懂报错”的差别。很多初学者一看到红色波浪线就慌了以为自己做错了什么大事。实际上报错是程序在用自己的方式告诉你哪儿出了问题。关键是我能分清楚报错发生在哪个阶段。5.1 先给报错定性编辑期、编译期、运行期C# 程序从源代码到正常运行会经历几个阶段。绝大多数报错都发生在以下三个阶段之一阶段触发时机典型表现错误来源编辑期写代码的过程中编辑器立刻显示红色/绿色波浪线语法错误、拼写错误编译期按下编译/运行时错误列表里出现 CS 开头的错误码类型不对、名字不存在运行期程序已经运行起来之后弹出未处理异常窗口输入不合法、索引越界、空引用给报错定性的方法很简单看它是什么时间段出现的。如果你还没按下运行键只是打字时就看到波浪线那是编辑期/编译期问题通常和语法或类型有关。如果程序都弹出了控制台窗口然后才中止那就是运行期问题通常是数据和逻辑的问题。5.2 三个高频编译错误CS1002、CS0103、CS0029很多编译错误看代码就能解决。我挑三个初学者最常遇到的以及背后的原因CS1002应输入 ;这个错误几乎每个 C# 新手都遇到过。原因通常是某个语句末尾少了分号。比如int num 10 Console.WriteLine(num);第一行少了分号编译器会提示“CS1002: 应输入 ;”。新手有时会找半天这行明明有分号啊。注意编译器报错的位置往往不是真实缺分号的那一行而是下一行。所以遇到 CS1002你要把报错位置往上找一行看看前一行末尾是不是漏了分号。CS0103当前上下文中不存在名称 xxx这个错误背后有两类情况一类是变量名拼写错误比如声明了int number后面写成了int numbrer。另一类是变量作用域问题比如在一个大括号内部声明的变量在外部引用。刚入门时遇到的几乎都是拼写错误。解决办法是看错误提示里的名称和实际声明的名称逐个字母比对。CS0029无法将类型 xxx 隐式转换为 yyy这个错误说明类型不匹配。比如把字符串赋给 int 变量。解决思路是要么改变量类型要么做显式转换。对于初学者我更推荐先判断“我到底想要什么类型”而不是盲目地把类型改成和赋值内容一致。5.3 运行时异常int.Parse 遇到“abc”会发生什么回到第 4 节的计算器程序。如果你在第一个整数输入框输入了abc程序会抛出一个异常System.FormatException: Input string was not in a correct format.这个异常的中文意思是“输入字符串格式不正确”。翻译成人话就是int.Parse想把abc变成数字但它做不到。有些教程遇到这个场景会直接教你用try-catch捕获异常让程序不崩。我建议初学者先不要跳这么快。你先把异常当成一种杀毒软件提示它告诉你“你给程序的输入不符合预期”。想验证这个结论你可以在运行期故意输入错误的内容观察异常信息和程序停止的位置。这个过程能帮你建立“错误定位”的肌肉记忆。当你学会断点调试之后会发现绝大多数运行期错误都可以用一句话概括某个变量在某个时刻的值不是你以为的那个值。5.4 用 IDE 的调试工具查看变量的实时值有些错误光靠读代码是看不出来的。这时候 Visual Studio 的断点调试是你的最佳工具。操作方式很简单在代码行左侧的灰色边栏点一下出现一个红色圆点这就是断点。按 F5 运行程序。程序执行到断点那一行时会自动暂停此时把鼠标悬停在变量上就能看到它当前的实时值。比如在int sum num1 num2;这一行打断点就能看到num1、num2的值到底是什么。如果num2显示为一个很大的负数你自然就会去检查业务逻辑哪里有漏洞。调试不是“出了错才做的事”它是一种理解程序执行过程的方法。哪怕是正常的程序你也完全可以打断点一步一步看它是怎么走的。这一步做得多了你对代码的掌控感会明显提升。5.5 排查报错的标准动作先读错误信息再搜代码最后分享一个我自用的排查套路。遇见报错时按照顺序做四件事完整读一遍错误信息。重点看错误码CS 开头和错误描述。大多数错误描述已经把原因说清楚了只是中文翻译有时比较拗口。看错误发生的文件和行号。在错误列表里双击错误IDE 会自动跳到出错位置。查看代码上下文。不要只看报错的那一行往前看两三行往往问题出在前一行的类型声明或者括号匹配。输入到搜索引擎里搜错误码。比如搜“CS1002 应该输入分号”能搜到大量相关讨论。这套流程每一次都执行一遍积累经验的速度会比盲目乱试快得多。等你处理过二三十个报错就会发现大多数错误看着吓人背后的原因就那么几种。最后再补充一个很实用的个人经验千万不要在不确定代码含义时复制粘贴网上的片段。对初学者来说手写一遍、哪怕写得慢也比直接粘贴好得多。手写的过程会逼着你的眼睛去注意每个标点、每对括号这恰恰是积累代码直觉最有效的方式。从今天创建的第一个小程序开始试着把每一行代码都敲进去运行、看懂、改坏、再修好这个循环本身就是最好的老师。
返回列表