GeWuYou 317eddca9b docs(sidebar): 更新侧边栏导航结构并移除API参考页面
- 调整Core模块导航链接结构,从overview页面改为根路径
- 重构Core模块侧边栏,将原有的6个主要类别扩展为15个详细分类
- 精简Game模块侧边栏,保留场景管理和游戏设置两个主要功能
- 更新Godot集成模块侧边栏,新增协程、信号、存储等功能分类
- 修改源码生成器模块命名,将枚举扩展重命名为枚举生成器
- 新增抽象接口侧边栏,包含Core和Game抽象接口文档
- 调整教程模块顺序,新增入门教程和Godot集成教程分类
- 移除独立的API参考导航项,将其整合到相应模块中
- 修正生成器API文档链接路径错误问题
2026-02-11 12:52:14 +08:00

175 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 枚举扩展生成器
> GFramework.SourceGenerators 自动生成枚举扩展方法
## 概述
枚举扩展生成器为枚举类型自动生成常用的扩展方法,如获取描述、转换为字符串、解析等。这大大简化了枚举的操作。
## 基本用法
### 标记枚举
```csharp
using GFramework.SourceGenerators.Attributes;
[EnumExtensions]
public enum PlayerState
{
Idle,
Running,
Jumping,
Attacking
}
```
### 生成的方法
上面的代码会被转换为:
```csharp
public static class PlayerStateExtensions
{
public static string GetDescription(this PlayerState value)
{
// 返回枚举的描述
}
public static bool HasFlag(this PlayerState value, PlayerState flag)
{
// 检查是否包含标志
}
public static PlayerState FromString(string value)
{
// 从字符串解析枚举
}
}
```
## 常用方法
### 获取描述
```csharp
[EnumExtensions]
public enum ItemQuality
{
[Description("普通")]
Common,
[Description("稀有")]
Rare,
[Description("史诗")]
Epic
}
public void PrintQuality(ItemQuality quality)
{
// 获取描述文本
Console.WriteLine(quality.GetDescription());
// 输出: "普通" / "稀有" / "史诗"
}
```
### 安全解析
```csharp
public void ParseState(string input)
{
// 安全地解析字符串为枚举
if (PlayerState.Running.TryParse(input, out var state))
{
Console.WriteLine($"状态: {state}");
}
}
```
### 获取所有值
```csharp
public void ListAllStates()
{
// 获取所有枚举值
foreach (var state in PlayerState.GetAllValues())
{
Console.WriteLine(state);
}
}
```
## 标志枚举
对于使用 `[Flags]` 特性的枚举:
```csharp
[EnumExtensions]
[Flags]
public enum PlayerPermissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4,
All = Read | Write | Execute
}
public void CheckPermissions()
{
var permissions = PlayerPermissions.Read | PlayerPermissions.Write;
// 检查是否包含特定权限
if (permissions.HasFlag(PlayerPermissions.Write))
{
Console.WriteLine("有写入权限");
}
// 获取所有设置的标志
foreach (var flag in permissions.GetFlags())
{
Console.WriteLine($"权限: {flag}");
}
}
```
## 自定义行为
### 忽略某些值
```csharp
[EnumExtensions(IgnoreValues = new[] { ItemQuality.Undefined })]
public enum ItemQuality
{
Undefined,
Common,
Rare,
Epic
}
// GetAllValues() 不会返回 Undefined
```
### 自定义转换
```csharp
[EnumExtensions(CaseSensitive = false)]
public enum Difficulty
{
Easy,
Medium,
Hard
}
// FromString("EASY") 也能正确解析
```
---
**相关文档**
- [Source Generators 概述](./overview)
- [日志生成器](./logging-generator)
- [规则生成器](./rule-generator)
- [API 参考](../api-reference/source-generators-api)