GeWuYou 1ab615db26 docs(source-generators): 更新文档结构并调整Godot版本信息
- 将Source Generators概述文档从overview重命名为index
- 更新所有相关文档中的链接指向新的index文件
- 移除Godot文档中的许可证和版本信息冗余内容
- 统一Godot版本要求从4.5.1+到4.6
- 删除各模块文档末尾的相关链接部分
- 优化文档结构提升可读性
2026-02-11 15:57:40 +08:00

174 lines
2.8 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 概述](./index)
- [日志生成器](./logging-generator)
- [规则生成器](./rule-generator)