C#泛型/通用类型 静态字典处理程序; 公共静态void Main(字符串[]args) { handlers=newdictionary(); AddHandler((object rawOne)=>{One One=(One)rawOne;Console.WriteLine(One.Data);}); AddHandler((object rawtow2)=>{Two Two=(Two)rawtow2;Console.WriteLine(Two.Data);}); 处理(新的(“测试”); 手柄(新两(123)); } 公共静态void AddHandler(操作处理程序) { 处理人[类型(T)]=处理人; } 公共静态无效句柄(对象数据) { 处理程序[data.GetType()].Invoke(数据); }

C#泛型/通用类型 静态字典处理程序; 公共静态void Main(字符串[]args) { handlers=newdictionary(); AddHandler((object rawOne)=>{One One=(One)rawOne;Console.WriteLine(One.Data);}); AddHandler((object rawtow2)=>{Two Two=(Two)rawtow2;Console.WriteLine(Two.Data);}); 处理(新的(“测试”); 手柄(新两(123)); } 公共静态void AddHandler(操作处理程序) { 处理人[类型(T)]=处理人; } 公共静态无效句柄(对象数据) { 处理程序[data.GetType()].Invoke(数据); },c#,generics,types,C#,Generics,Types,因为没有更好的方式来表达这一点:我将如何着手以一种方式制作这部电影,而不必使用拉沃尼和拉沃二 基本上,我想要这个: AddHandler((object rawOne)=>{One One=(One)rawOne; Console.WriteLine(one.Data);}); 看起来像这样: AddHandler((一个)=>{Console.WriteLine(一个.Data);}; 但是,我不知道如何做到这一点。显然,我必须以某种方式修改字典,但我不知道如何做到。像这样: public

因为没有更好的方式来表达这一点:我将如何着手以一种方式制作这部电影,而不必使用拉沃尼和拉沃二

基本上,我想要这个:

AddHandler((object rawOne)=>{One One=(One)rawOne;
Console.WriteLine(one.Data);});
看起来像这样:

AddHandler((一个)=>{Console.WriteLine(一个.Data);};
但是,我不知道如何做到这一点。显然,我必须以某种方式修改字典,但我不知道如何做到。

像这样:

public static void AddHandler<T>(Action<T> handler)
{
    handlers[typeof(T)] = o => handler((T)o);
}
……或者:

AddHandler<One>(one => { Console.WriteLine(one.Data); };
AddHandler(one=>{Console.WriteLine(one.Data);};

那么我该如何将其添加到处理程序字典中?如果我有点过密,我很抱歉,但是我该如何将字典的定义更改为?@user1438378您根本不会更改它。如果我保持不变,我会收到一个错误,通知我“无法隐式地将System.Action转换为System.Action”。嘿,您是对的。我键入的内容不正确很好。谢谢你的帮助,一切都好了。
AddHandler<One>(one => { Console.WriteLine(one.Data); };