using System; using Microsoft.CodeAnalysis; namespace GFramework.SourceGenerators.Common.extensions; /// /// 提供AttributeData的扩展方法 /// public static class AttributeDataExtensions { /// 特性数据对象 extension(AttributeData attr) { /// /// 从特性数据中获取指定名称的命名参数值 /// /// 期望返回的参数类型 /// 要查找的命名参数名称 /// 当找不到指定参数时返回的默认值 /// 找到的参数值,如果未找到或类型不匹配则返回默认值 public T? GetNamedArgument(string name, T? defaultValue = default) { // 遍历所有命名参数以查找匹配的键值对 foreach (var kv in attr.NamedArguments) { if (string.Equals(kv.Key, name, StringComparison.Ordinal) && kv.Value.Value is T t) return t; } return defaultValue; } /// /// 获取特性构造函数的第一个参数作为字符串值 /// /// 当没有构造函数参数或第一个参数不是字符串时返回的默认值 /// 构造函数第一个参数的字符串值,如果不存在则返回默认值 public string GetFirstCtorString(string defaultValue) { if (attr.ConstructorArguments.Length == 0) return defaultValue; return attr.ConstructorArguments[0].Value as string ?? defaultValue; } } }