自定义字段Attribute在枚举中调用MyMethod无返回值问题求助
解决枚举字段自定义Attribute的MyMethod返回值问题
兄弟,我瞅了你的代码,问题主要出在两个关键地方,导致你拿不到MyMethod的预期返回结果:
- 错误的Attribute获取方式:你现在用
Attribute.GetCustomAttributes(t)是从枚举CustomEnum这个类型上拿Attribute,但你的FieldAttribute明明是标记在枚举的单个字段(比如Field1、Field2)上的,所以这一步根本拿不到任何FieldAttribute实例,自然不会输出内容。 - 未赋值的LastName属性:就算拿到了Attribute,你也没给
LastName赋值,MyMethod里拼接name + LastName的时候,LastName是null,C#里字符串和null拼接会把null当作空字符串处理,结果只会输出name的值,也不符合你想要的拼接效果。
修正后的完整代码
using System; using System.Reflection; public enum CustomEnum { [Field("first field")] Field1, [Field("second field")] Field2, [Field("third field")] Field3 } [AttributeUsage(AttributeTargets.Field)] public class FieldAttribute : Attribute { private string name; public FieldAttribute(string name) { this.name = name; } public string LastName { get; set; } public string MyMethod() { return this.name + this.LastName; } } public class Program { public static void Main(string[] args) { PrintInfo(typeof(CustomEnum)); } public static void PrintInfo(Type t) { Console.WriteLine($"Information for {t}"); // 遍历枚举的所有公开静态字段(枚举值本质是静态字段) foreach (var field in t.GetFields(BindingFlags.Public | BindingFlags.Static)) { // 获取当前字段上的FieldAttribute var fieldAttr = field.GetCustomAttribute<FieldAttribute>(); if (fieldAttr != null) { // 给LastName赋值,这里可以根据你的业务需求自定义内容 fieldAttr.LastName = " - custom suffix"; Console.WriteLine($" {fieldAttr.MyMethod()}"); } } } }
运行结果
执行这段代码后,你会得到符合预期的输出:
Information for CustomEnum first field - custom suffix second field - custom suffix third field - custom suffix
内容的提问来源于stack exchange,提问作者Westbrook
相关产品推荐
相关产品推荐

