C# 入门周记

1. 环境搭建

1.1C#简介
C#(读作“C Sharp”)是一种由微软开发的面向对象的、类型安全的编程语言,作为.NET框架的一部分,它旨在提供一种简洁、现代、面向对象的编程范式。自从2002年首次发布以来,C#经历了多次版本迭代,不断增强其表达力和运行效率。目前广泛应用于企业应用开发、游戏开发(尤其是通过Unity引擎)、Windows应用程序、网络服务和云应用等多种开发场景
1.2 Visual Studio 2022下载
官网下载: https://visualstudio.microsoft.com/zh-hans/vs/
1.3 第一个C#程序–HelloWorld

staticvoidMain(string[]args){Console.WriteLine("我的第一个C#程序:HelloWorld!");}

2. C#基本数据类型与变量

2.1 自定义变量命名及输入输出语句

//变量名, 首字母小写, 小驼峰命名法//类名,方法名, 首字母大写, 大驼峰命名法stringname="李四";intage=18;boolisMale;//是否是男生isMale=true;str="hello";Console.Write("你好:\n在吗?");//输出之后不换行, 必须小括号传值//转义符: \n 换行符 \t: 制表符Console.WriteLine();//输出后换行,快捷键cw+tab//输入: Console.ReadLine() 读取一行字符串, 返回值是string类型Console.WriteLine("请输入您的姓名:");name=Console.ReadLine();//阻塞方法//使用+进行拼接Console.WriteLine("姓名:"+name+",年龄:"+age+",是否是男生:"+isMale);//使用$插值语法 $"字符串...{变量名},....{变量名2}"Console.WriteLine($"姓名:{name},年龄:{age},是否是男生:{isMale}");

2.2 数据类型转换
string 转换为其他值类型(值类型都一个Parse()方法, 把字符串转换为指定类型)

intmyAge=int.Parse(Console.ReadLine());//把string转换为intdecimalbalance=decimal.Parse(Console.ReadLine());//把string转换为decimaldoublescore=double.Parse(Console.ReadLine());//把string转换为double

其他类型转换为string类型: ToString()

doublescore=30;strings=score.ToString();//将double转换为string

2.3 运算符
算数运算符:+,-,,/,%,++,–
赋值运算符:=,+=,-=,
=,/=,%=
比较运算符:>,<,==,>=,<=,!=
逻辑运算符:&,|,!,^,&&,||
运算符优先级:算术运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符

3. if选择判断结构的基本语法

if(条件表达式){//条件表达式的结果为bool类型, 比较表达式, 逻辑表达式//满足条件执行的代码}//if-else (否则) 二选一if(条件表达式)//条件表达式的结果为bool类型, 比较表达式, 逻辑表达式{//满足条件执行的代码}else{//不满足条件执行的代码}// 多分支if n选1if(条件表达式1)//条件表达式的结果为bool类型, 比较表达式, 逻辑表达式{//满足条件执行的代码}elseif(条件表达式2){}...else{//不满足条件执行的代码}//嵌套if//if/else 内部,嵌套if结构 , 条件是并且关系if(条件1){if(条件2){//满足: 条件1为true,并且条件2为true}else{////满足: 条件1为true,并且条件2为false}}

案例:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出结果

staticvoidMain(string[]args){Console.WriteLine("请输入数字:");intnum=int.Parse(Console.ReadLine());if(num%2==0){Console.WriteLine(num+"是偶数");}else{Console.WriteLine(num+"是奇数");}}

4. switch 等值判断

switch写的代码,都可以使用if替换

switch(表达式){case值1://执行代码break;//退出switchcase值2://执行代码break;...default://执行代码break;}

案例:键盘输入星期数,显示今天的减肥活动
周一: 跑步
周二: 游泳
周三: 慢走
周四: 动感单车
周五: 拳击
周六: 周日: 好好休息

staticvoidMain(string[]args){Console.WriteLine("请输入周几:");intweek=int.Parse(Console.ReadLine());switch(week){case1:Console.WriteLine("跑步");break;case2:Console.WriteLine("游泳");break;case3:Console.WriteLine("慢走");break;case4:Console.WriteLine("骑单车");break;case5:Console.WriteLine("拳击");break;default:Console.WriteLine("躺平休息");break;}}

5. 循环结构

5.1 for循环
特征: 先判断,后循环, 循环次数确定

for(表达式1;表达式2;表达式3){//循环体}

执行顺序: 表达式1 --> 表达式2(true)->循环体–>表达式3–>表达式2(false)–>
退出循环
5.2 while循环
特征: 先判断,后循环, for写的都可以使用while替换,

初始化循环变量;while(循环条件){循环体;修改循环变量;//重点}

5.3 do-while循环
特征: 先循环,后判断

初始化循环变量do{循环体;修改循环变量;//重点}while(循环条件);

5.4 循环控制关键字

break: 在循环或者是switch使用, 退出循环
continue: 只能在循环内部使用, 跳过本次循环,直接进入下次循环

6. 数组

6.1 声明

数据类型[] 数组名;

6.2 开辟空间: 通过new关键字, 在堆开辟空间

数组名 = new 数据类型[长度];

6.3 给数组的位置添加元素, 通过下标操作

数组名[下标] = 值;

6.4 动态获取数组的长度: 数组名.Length;

int[] arr;
arr = new int[5];
int n = arr.Length;

6.5 fori循环简化: foreach循环

foreach(数据类型 变量 in 数组名)
{
}
foreach循环写的都可以使用fori替换
foreach只能操作元素, 无下标操作, fori循环既可以操作元素, 又可以操作下
标

6.6 声明与开辟合并一行

数据类型[] 数组名 = new 数据类型[长度];

6.7 数组的静态初始化: 创建数组时,添加元素

数据类型[] 数组名 = new 数据类型[]{值1,值2,…};
简化:数据类型[] 数组名 = {值1,值2,…};

7. List泛型列表

7.1 创建 List

List<int>numbers=newList<int>();// 空列表List<string>names=newList<string>(){"Alice","Bob"};// 初始化列表List<double>values=newList<double>(10);// 指定初始容量

7.2 添加元素

numbers.Add(1);// 添加单个元素numbers.AddRange(newint[]{2,3,4});// 添加多个元素

7.3 访问元素

intfirst=numbers[0];// 通过索引访问numbers[1]=10;// 通过索引修改

7.4 常用方法

intcount=numbers.Count;// 获取元素数量boolcontains=numbers.Contains(3);// 检查是否包含intindex=numbers.IndexOf(3);// 查找索引numbers.Insert(1,5);// 在指定位置插入numbers.Remove(3);// 移除指定元素numbers.RemoveAt(0);// 移除指定位置的元素numbers.Clear();// 清空列表

7.5 遍历列表

// foreach 循环foreach(intnuminnumbers){Console.WriteLine(num);}// for 循环for(inti=0;i<numbers.Count;i++){Console.WriteLine(numbers[i]);}

8. 字符串string

字符串的相等为值比较,只要字符序列相同即可。

stringobj="abc";stringstr="a";stringobj2=str+"bc";Console.WriteLine(obj==obj2);//true

使用Length属性可以获取字符串的长度:

stringtext="Hello";Console.WriteLine(text.Length);// 输出: 5

[] 运算符可用于只读访问字符串的个别字符。 有效索引于 0 开始,且必须小于字符串的长度:

stringstr="test";charx=str[2];// x = 's';

9. 类与对象

定义类的语法:

访问修饰符 class 类名
{
//定义字段部分
数据类型 字段1;
数据类型 字段2;
…
//定义属性部分
数据类型 属性1;
数据类型 属性2;
…
//定义方法部分
方法1
方法2
…
}

案例:编写一个学生类,包含编号,姓名,性别,年龄的字段,以及对应的属性,还有一个学习方法

classStudent{//字段intid;stringname;charsex='男';intage;//属性publicintId{get;set;}publicstringName{get{returnname;}set{name=value;}}publiccharSex{get{returnsex;}set{sex=value;}}publicintAge{get{returnage;}set{age=value;}}//方法publicvoidStudy(){Console.WriteLine(name+"正在学习");}

结语

此文档仅供参考,可能存在错误和不足。

相关新闻

宁波执业律师张娟:离婚时公司股权怎么分——确权、估值与分割的三道关

宁波执业律师张娟:离婚时公司股权怎么分——确权、估值与分割的三道关

结论先行&#xff1a;离婚时公司股权的分割要过三道关——确权、估值、分割。登记在一方名下的股权不等于个人财产&#xff0c;婚内取得及婚内增值部分原则上纳入分割&#xff1b;而分割方式受公司法与章程的双重约束&#xff0c;配偶未必能直接成为股东&#xff0c;折价补偿才…

2026/10/21 2:27:54 阅读更多 →
DINOv3 助力 YOLO26 攻小目标:召回 +6.2pt、参数零增加,收益从哪来、能用在哪

DINOv3 助力 YOLO26 攻小目标:召回 +6.2pt、参数零增加,收益从哪来、能用在哪

DINOv3 助力 YOLO26 攻小目标&#xff1a;召回 6.2pt、参数零增加&#xff0c;收益从哪来、能用在哪 工业质检线上有一个反复被验证的规律&#xff1a;大目标拼框得准&#xff0c;小目标拼检得出。一个 4040 的斑块&#xff0c;模型闭着眼睛也能框出来&#xff1b;可一条两三像…

2026/10/21 2:27:54 阅读更多 →
空中机器人竞赛备赛利器:从仿真平台到真机迁移的完整指南

空中机器人竞赛备赛利器:从仿真平台到真机迁移的完整指南

你们的队伍正在备战大学生机器人竞赛的空中机器人赛项&#xff1f;那大概率已经在真机上经历过几次“心碎时刻”&#xff1a;新调好的四旋翼第二次试飞就炸机&#xff0c;桨叶碎片弹到天花板上&#xff0c;剩下半架飞机只能躺在维修桌上。某高校的A同学跟我讲过&#xff0c;他们…

2026/10/21 2:27:54 阅读更多 →

最新新闻

Nginx为何要用StatefulSet?稳定身份与持久化存储实战解析

Nginx为何要用StatefulSet?稳定身份与持久化存储实战解析

1. Nginx为什么会落到StatefulSet头上——先弄清楚值不值得先说个直觉判断&#xff1a;一听到“Nginx用StatefulSet部署”&#xff0c;大多数人第一反应是“写错了吧”。Nginx这种典型无状态的反向代理&#xff0c;常规做法就是Deployment挂ConfigMap&#xff0c;前面再套个Ser…

2026/10/21 3:05:06 阅读更多 →
LangGraph 工具读取图状态 runtime.state 为空的排查

LangGraph 工具读取图状态 runtime.state 为空的排查

用 supervisor 编排多个子 agent 时,"一个工具写入草稿、另一个工具读取并提交"是很自然的设计。但按直觉在工具里读图状态,往往拿到的一直是空字典。 问题现象 整体结构是:主 agent 只做路由,不带工具;订单子 agent 带三个工具 create_order、update_order、…

2026/10/21 3:05:06 阅读更多 →
手游MMORPG遮挡剔除:从零到实战优化

手游MMORPG遮挡剔除:从零到实战优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 3:05:06 阅读更多 →
AI智能体如何构建行业生命周期动态模型,让产业演变可预判

AI智能体如何构建行业生命周期动态模型,让产业演变可预判

“行业生命周期”这个词&#xff0c;很多做战略、投资或产业研究的朋友都不陌生。但你有没有想过&#xff0c;把它从一套事后复盘用的曲线图&#xff0c;变成一套能实时追踪、提前预判的动态系统&#xff1f;我最近就在折腾这件事&#xff0c;用AI agents&#xff08;AI智能体&…

2026/10/21 3:05:06 阅读更多 →
Leap Motion手势追踪在VR交互中的深度集成与优化实战

Leap Motion手势追踪在VR交互中的深度集成与优化实战

开篇&#xff1a;从一只手的“姿态”说起做沉浸式交互这几年&#xff0c;有一个体会越来越深&#xff1a;真正让人“沉浸”的&#xff0c;往往不是屏幕里那几帧多惊艳的画面&#xff0c;而是你伸手出去&#xff0c;系统能不能像理解一个老朋友一样&#xff0c;读懂你的手势。Le…

2026/10/21 3:05:06 阅读更多 →
MinIO控制台动态端口排查与固定:容器部署必读指南

MinIO控制台动态端口排查与固定:容器部署必读指南

1. 遇到“Console endpoint is listening on a dynamic port”时的第一反应如果你在终端或者容器日志里看到这样一行&#xff1a;Console endpoint is listening on a dynamic port , please use --console-address&#xff0c;先别慌&#xff0c;你的MinIO其实已经跑起来了&am…

2026/10/21 3:04:06 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →