Estou tentando criar um evento, mas gostaria de não ter os nomes padrão (arg1, arg2, etc.)
Como posso definir nomes padrão para que, em vez de algo
TypeName_MethodName(int arg1, string arg2)
Posso obter algo assim:
TypeName_MethodName(int age, string name)?
Editar: código (não tenho certeza do porquê isso importa para algo assim), não ligue para meu código provavelmente ineficiente, não é por isso que estamos aqui:
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}.");
}
}
}
O problema é que você está usando
Action<T1, T2>
como seu delegado de evento. Isso é declarado no código do framework como o seguinte:Por que não declarar seu próprio delegado e usá-lo em vez disso? Isso usará os nomes de parâmetros do seu delegado no manipulador de eventos gerado:
A propósito, a seguinte atribuição é redundante: você está adicionando um manipulador de eventos que está vazio e não faz nada:
Com o acima, basta alterar para: