mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 将Source Generators概述文档从overview重命名为index - 更新所有相关文档中的链接指向新的index文件 - 移除Godot文档中的许可证和版本信息冗余内容 - 统一Godot版本要求从4.5.1+到4.6 - 删除各模块文档末尾的相关链接部分 - 优化文档结构提升可读性
2.8 KiB
2.8 KiB
枚举扩展生成器
GFramework.SourceGenerators 自动生成枚举扩展方法
概述
枚举扩展生成器为枚举类型自动生成常用的扩展方法,如获取描述、转换为字符串、解析等。这大大简化了枚举的操作。
基本用法
标记枚举
using GFramework.SourceGenerators.Attributes;
[EnumExtensions]
public enum PlayerState
{
Idle,
Running,
Jumping,
Attacking
}
生成的方法
上面的代码会被转换为:
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)
{
// 从字符串解析枚举
}
}
常用方法
获取描述
[EnumExtensions]
public enum ItemQuality
{
[Description("普通")]
Common,
[Description("稀有")]
Rare,
[Description("史诗")]
Epic
}
public void PrintQuality(ItemQuality quality)
{
// 获取描述文本
Console.WriteLine(quality.GetDescription());
// 输出: "普通" / "稀有" / "史诗"
}
安全解析
public void ParseState(string input)
{
// 安全地解析字符串为枚举
if (PlayerState.Running.TryParse(input, out var state))
{
Console.WriteLine($"状态: {state}");
}
}
获取所有值
public void ListAllStates()
{
// 获取所有枚举值
foreach (var state in PlayerState.GetAllValues())
{
Console.WriteLine(state);
}
}
标志枚举
对于使用 [Flags] 特性的枚举:
[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}");
}
}
自定义行为
忽略某些值
[EnumExtensions(IgnoreValues = new[] { ItemQuality.Undefined })]
public enum ItemQuality
{
Undefined,
Common,
Rare,
Epic
}
// GetAllValues() 不会返回 Undefined
自定义转换
[EnumExtensions(CaseSensitive = false)]
public enum Difficulty
{
Easy,
Medium,
Hard
}
// FromString("EASY") 也能正确解析
相关文档: