You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义字段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:44:11