2.C# —— 结构体、类型转换与运算符

目录

一、结构体(struct)与常量(const)

[1. 结构体(struct)](#1. 结构体(struct))

[2. 常量(const)](#2. 常量(const))

[二、值类型 vs 引用类型(核心重点)](#二、值类型 vs 引用类型(核心重点))

[1. 值类型](#1. 值类型)

[2. 引用类型](#2. 引用类型)

[三、4 种类型转换方法(新手必会)](#三、4 种类型转换方法(新手必会))

[1. 强制转换(数字 → 数字)](#1. 强制转换(数字 → 数字))

[2. Parse 转换(字符串 → 对应类型)](#2. Parse 转换(字符串 → 对应类型))

[3. Convert 万能转换](#3. Convert 万能转换)

[4. TryParse 安全转换(最推荐)](#4. TryParse 安全转换(最推荐))

补充:隐式转换(自动转换)

[四、常用运算符(5 大类)](#四、常用运算符(5 大类))

[1. 算术运算符](#1. 算术运算符)

[2. 赋值运算符](#2. 赋值运算符)

[3. 自增 / 自减运算符](#3. 自增 / 自减运算符)

[4. 比较运算符](#4. 比较运算符)

[5. 三目运算符](#5. 三目运算符)

五、逻辑运算符(重点)

[1. && 短路与](#1. && 短路与)

[2. || 短路或](#2. || 短路或)

[3. ! 取反](#3. ! 取反)

[4. ^ 异或](#4. ^ 异或)

六、总结


一、结构体(struct)与常量(const)

结构体用于打包多个相关变量,常量用于定义不可修改的值,是规范数据的常用方式。

1. 结构体(struct)

作用:把多个变量打包成一个整体,统一管理(如长方形、坐标、学生信息)。特点:属于值类型,存储数据本身。

cs 复制代码
using System;

namespace 结构体和常量
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 声明结构体变量
            Rect rect;
            // 赋值
            rect.length = 100;
            rect.width = 10;
            // 使用
            Console.WriteLine("矩形面积:" + rect.length * rect.width);
        }

        // 定义结构体
        struct Rect
        {
            public float length;
            public float width;
        }
    }
}

2. 常量(const)

作用:定义一旦赋值就不能修改的值。注意:必须在定义时赋值,后续不能修改。

cs 复制代码
// 定义常量
const float PI = 3.14159f;

// PI = 3.14; 报错,常量不可修改

二、值类型 vs 引用类型(核心重点)

一句话记忆:值类型存数据本身,引用类型存地址。

1. 值类型

  • 存储数据本身
  • 赋值时拷贝一份新数据
  • 修改一个,另一个不受影响
  • 包含:int、float、double、bool、char、byte、struct、enum
cs 复制代码
int a = 10;
int b = a;
a = 20;
Console.WriteLine(b); // 输出 10

2. 引用类型

  • 存储数据地址
  • 赋值时拷贝地址,共用一份数据
  • 修改一个,另一个跟着变
  • 包含:string、class、数组

提示:string 是特殊引用类型,具有不可变性。


三、4 种类型转换方法(新手必会)

处理字符串转数字、数字类型互转必备,覆盖所有场景。

1. 强制转换(数字 → 数字)

语法:(目标类型)变量会直接忽略小数,不四舍五入。

cs 复制代码
float a = 10.9f;
int b = (int)a; // 结果 10

2. Parse 转换(字符串 → 对应类型)

语法:类型.Parse(字符串)转换失败会报错。

cs 复制代码
string str = "10";
int num = int.Parse(str); // 10

bool b = bool.Parse("True"); // True

3. Convert 万能转换

适用范围最广,支持各种类型互转。

cs 复制代码
int num = Convert.ToInt32("10");
string str = Convert.ToString(100);
bool b = Convert.ToBoolean("true");

4. TryParse 安全转换(最推荐)

不会报错,失败返回 false,结果为默认值。

cs 复制代码
string str = "10";
bool success = int.TryParse(str, out int result);
Console.WriteLine(success + ":" + result);

补充:隐式转换(自动转换)

小范围 → 大范围,自动转换,不丢失数据。

cs 复制代码
int a = 10;
long b = a; // 自动转换

四、常用运算符(5 大类)

1. 算术运算符

+ - * / %

  • /:整数相除只保留整数
  • %:取余,常用于取个位、十位、百位
cs 复制代码
Console.WriteLine(10 / 20); // 0
Console.WriteLine(10 % 20); // 10

// 取 321 的百位、十位、个位
int num = 321;
int ge = num % 10;
int shi = (num % 100) / 10;
int bai = num / 100;

2. 赋值运算符

= += -= *= /= %=

cs 复制代码
int a = 100;
a += 10; // a = a + 10

3. 自增 / 自减运算符

++ 每次 +1,-- 每次 -1

  • a++:先用后加
  • ++a:先加后用
cs 复制代码
int a = 10;
Console.WriteLine(a++); // 10
Console.WriteLine(++a); // 12

4. 比较运算符

< > <= >= == !=结果一定是 bool(true /false)

5. 三目运算符

条件 ? 成立值 : 不成立值

cs 复制代码
string res = 10 > 20 ? "真" : "假";

五、逻辑运算符(重点)

&& || ! ^

1. && 短路与

一假则假,前面为假,后面不执行。

2. || 短路或

一真则真,前面为真,后面不执行。

3. ! 取反

!true = false

4. ^ 异或

两个条件不一样为 true。


六、总结

  1. 结构体打包变量,属于值类型。
  2. const 常量定义后不可修改。
  3. 值类型拷贝数据,引用类型拷贝地址。
  4. 转换优先用 TryParse,安全不报错。
  5. ++/-- 区分先后顺序;&& || 具有短路特性。
  6. 三目运算符可以简化简单判断。
相关推荐
Leinwin2 小时前
Copilot Studio 实战:多模型选择、GitHub Copilot harness 计费与 Copilot Credits 额度管理
开发语言·c#
FuckPatience2 小时前
C# Winform 使用Label循环显示闪烁
开发语言·c#
念何架构之路2 小时前
OpenTelemetry核心概念
后端·目标跟踪·golang·c#·linq
开开心心就好2 小时前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
波力海苔夹心脆6753 小时前
C# 固高 GTS 运动控制卡入门:伺服上下电、Jog 点动与二维插补(WinForms 实战)
服务器·开发语言·c#·运动控制·伺服电机·winforms·固高
何以解忧唯有撸码9 小时前
c# + YOLODotNet+OpenCVSharp 实现物品轨迹追踪
计算机视觉·c#·winform·yolov8·opencvsharp
阿松爱学习19 小时前
【Unity开发】局部区域截图功能实现
unity·c#
zhanghaha131420 小时前
C# 系列教程_1 基础语法篇(面向新手系统教程)
开发语言·c#
昂好的day21 小时前
固高运动控制卡实战(下):点位运动与直线/圆弧插补 API 详解
开发语言·c#
淡海水1 天前
08-02-优化-LINQ与函数式编程的GC代价
unity·c#·.netcore·linq·gc