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

如何修改C#中事件自动生成的参数默认名称?

如何自定义C#事件处理方法的默认参数名?

我在创建C#事件时,不想使用默认生成的arg1、arg2这类参数名称,希望事件处理方法能从TypeName_MethodName(int arg1, string arg2)变为TypeName_MethodName(int age, string name),请问该怎么设置自定义的默认参数名?

补充示例代码(代码效率问题无需关注)

namespace Test
{
    public static class People
    {
        public static event Action<int, string> OnPersonAdded = (age, name) => { };

        public static void AddPerson(int age, string name)
        {
            if (!PeopleByAge.TryAdd(age, [name]))
            {
                PeopleByAge[age].Add(name);
            }

            OnPersonAdded(age, name);
        }

        public static Dictionary<int, List<string>> PeopleByAge = [];
    }

    public static class Program
    {
        public static void Main(string[] args)
        {
            People.OnPersonAdded += People_OnPersonAdded;
            People.AddPerson(int.Parse(args[0]), args[1]);
        }

        private static void People_OnPersonAdded(int arg1, string arg2)
        {
            Console.WriteLine($"Add person {arg2}, aged {arg1}.");
        }
    }
}

解决方案

核心问题在于Action<int, string>这类泛型委托的参数没有显式命名,IDE只能用arg1、arg2这类默认名称生成处理方法。要解决这个问题,最直接的方式是自定义带明确参数名的委托类型:

1. 定义自定义委托

在合适的命名空间下,创建一个委托类型,明确指定参数的名称:

public delegate void PersonAddedHandler(int age, string name);

2. 修改事件的类型

将原来的Action<int, string>替换为自定义的委托类型:

public static event PersonAddedHandler OnPersonAdded = (age, name) => { };

3. 自动生成事件处理方法

此时再通过IDE的自动补全(比如在People.OnPersonAdded +=后按Tab键),生成的事件处理方法就会自动使用自定义的参数名:

private static void People_OnPersonAdded(int age, string name)
{
    Console.WriteLine($"Add person {name}, aged {age}.");
}

修改后的完整代码

namespace Test
{
    // 自定义委托类型,明确参数名称
    public delegate void PersonAddedHandler(int age, string name);

    public static class People
    {
        public static event PersonAddedHandler OnPersonAdded = (age, name) => { };

        public static void AddPerson(int age, string name)
        {
            if (!PeopleByAge.TryAdd(age, [name]))
            {
                PeopleByAge[age].Add(name);
            }

            OnPersonAdded(age, name);
        }

        public static Dictionary<int, List<string>> PeopleByAge = [];
    }

    public static class Program
    {
        public static void Main(string[] args)
        {
            People.OnPersonAdded += People_OnPersonAdded;
            People.AddPerson(int.Parse(args[0]), args[1]);
        }

        // 参数名自动变为age和name
        private static void People_OnPersonAdded(int age, string name)
        {
            Console.WriteLine($"Add person {name}, aged {age}.");
        }
    }
}

内容的提问来源于stack exchange,提问作者Lerpmcgerk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:15:14