簡體   English   中英

C#泛型/常規類型

[英]C# Generics / General Types

static Dictionary<Type, Action<object>> handlers;

public static void Main (string[] args)
{
    handlers = new Dictionary<Type, Action<object>>();

    AddHandler<One>((object rawOne) => { One one = (One)rawOne; Console.WriteLine(one.Data); });
    AddHandler<Two>((object rawTwo) => { Two two = (Two)rawTwo; Console.WriteLine(two.Data); });

    Handle(new One("Test"));
    Handle(new Two(123));
}

public static void AddHandler<T>(Action<object> handler)
{
    handlers[typeof(T)] = handler;
}

public static void Handle(object data)
{
    handlers[data.GetType()].Invoke(data);
}

由於缺少更好的措辭:我將如何以不必鑄造rawOne和rawTwo的方式進行制作?

基本上,我想要這樣:

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

看起來像這樣:

AddHandler<One>((One one) => { Console.WriteLine(one.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>(one => { Console.WriteLine(one.Data); };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM