Skip to main content

元组

元组(ValueTuple)从入门到精通 完整版代码

这份代码复制即可直接运行,包含了 C# 元组 90% 常用知识点,从最基础到高级用法全覆盖,特别适合你做贪吃蛇、控制台游戏

using System;
using System.Collections.Generic;

// 完整版:C# 值元组 (ValueTuple) 全用法教程
class TupleFullDemo
{
static void Main()
{
// ==============================================
// 【1】基础用法:创建元组
// ==============================================
Console.WriteLine("=== 1. 创建元组 ===");

// 方式1:隐式类型(最简单)
var point1 = (10, 20);
Console.WriteLine($"point1:x={point1.Item1}, y={point1.Item2}");

// 方式2:命名元组(最推荐!!!)
(int x, int y) point2 = (30, 40);
Console.WriteLine($"point2:x={point2.x}, y={point2.y}");

// 方式3:先声明,后赋值
(int w, int h) size;
size.w = 50;
size.h = 60;
Console.WriteLine($"size:w={size.w}, h={size.h}");


// ==============================================
// 【2】元组解构(拆包)—— 超级好用
// ==============================================
Console.WriteLine("\n=== 2. 元组解构 ===");

// 直接把元组拆成两个变量
(int a, int b) = (100, 200);
Console.WriteLine($"a = {a}, b = {b}");

// 用在循环里(贪吃蛇核心写法)
List<(int x, int y)> snakeParts = new List<(int, int)>
{
(5,5), (6,5), (7,5)
};
foreach (var (x, y) in snakeParts)
{
Console.WriteLine($"蛇身坐标:({x}, {y})");
}


// ==============================================
// 【3】方法返回多个值(元组最大用途)
// ==============================================
Console.WriteLine("\n=== 3. 方法多返回值 ===");

var result = GetMaxMin(99, 66);
Console.WriteLine($"最大值:{result.max}");
Console.WriteLine($"最小值:{result.min}");

// 直接解构接收
(int max, int min) = GetMaxMin(88, 11);
Console.WriteLine($"直接拆包:max={max}, min={min}");


// ==============================================
// 【4】不同类型混合元组
// ==============================================
Console.WriteLine("\n=== 4. 混合类型元组 ===");
(string name, int age, bool isStudent) student = ("小明", 20, true);
Console.WriteLine($"姓名:{student.name},年龄:{student.age},是学生:{student.isStudent}");


// ==============================================
// 【5】元组作为List元素(你的贪吃蛇专用)
// ==============================================
Console.WriteLine("\n=== 5. 元组 + List(贪吃蛇核心) ===");

// 这就是你问的那行代码!
List<(int x, int y)> snake = new List<(int, int)>();

// 添加身体
snake.Add((2, 2));
snake.Add((3, 2));
snake.Add((4, 2));

// 遍历
for (int i = 0; i < snake.Count; i++)
{
Console.WriteLine($"第{i}节:({snake[i].x}, {snake[i].y})");
}


// ==============================================
// 【6】元组比较(值比较)
// ==============================================
Console.WriteLine("\n=== 6. 元组比较 ===");
(int x, int y) p1 = (10, 20);
(int x, int y) p2 = (10, 20);
Console.WriteLine($"p1 和 p2 相等吗?{p1.Equals(p2)}");


// ==============================================
// 【7】高级用法:作为方法参数
// ==============================================
Console.WriteLine("\n=== 7. 元组作为参数 ===");
DrawPoint((5, 5));


Console.WriteLine("\n按任意键退出...");
Console.ReadKey();
}

// 方法:返回两个值(最大值、最小值)
static (int max, int min) GetMaxMin(int num1, int num2)
{
if (num1 > num2)
return (num1, num2);
else
return (num2, num1);
}

// 方法:接收元组参数
static void DrawPoint((int x, int y) pos)
{
Console.SetCursorPosition(pos.x, pos.y);
Console.Write("■");
}
}

这份代码包含的核心知识点(你必须掌握)

1. 命名元组(最重要)

(int x, int y) point = (10, 20);
point.x point.y

👉 写贪吃蛇坐标必须用这个

2. 元组解构

foreach (var (x, y) in snake)

👉 画蛇的时候一行代码拿到坐标。

3. List + 元组(你的贪吃蛇本体)

List<(int x, int y)> snake = new List<(int, int)>();

👉 一节一节的蛇身。

4. 方法多返回值

(int max, int min) GetMaxMin(...)

👉 C# 最实用的元组用法。


你运行后会看到什么?

  • 基础元组创建
  • 拆包用法
  • 多返回值演示
  • 混合类型
  • 贪吃蛇坐标列表演示
  • 控制台画点(用到了你之前学的 SetCursorPosition

总结

学会这份代码,你就完全精通 C# 元组了! 而且正好能直接用来写贪吃蛇

需要我把元组 + 光标控制 + 贪吃蛇雏形整合在一起,给你一个能跑的迷你版贪吃蛇吗?直接就能动的那种!