C# 如何将泛型类型传递到新的泛型对象?

C# 如何将泛型类型传递到新的泛型对象?,c#,generics,unity3d,C#,Generics,Unity3d,我有两个类,Character和Npc,它们都继承自一个名为“Actor”的基类。考虑以下两种基本上相同的方法: public static Dictionary<uint, Npc> drawnNpcs = new Dictionary<uint, Npc>(); public static Dictionary<uint, Character> drawnCharacters = new Dictionary<uint, Character>(

我有两个类,Character和Npc,它们都继承自一个名为“Actor”的基类。考虑以下两种基本上相同的方法:

public static Dictionary<uint, Npc> drawnNpcs = new Dictionary<uint, Npc>();
public static Dictionary<uint, Character> drawnCharacters = new Dictionary<uint, Character>();
publicstaticdictionary drawnNpcs=newdictionary();
公共静态字典drawnCharacters=新字典();

private Game Object DrawCharacter(ActorRapper actorToDraw)
{
配子对象对象;
if(Data.drawnCharacters.ContainsKey(actorToDraw.Id))
{
性格;
Data.drawnCharacters.TryGetValue(actorToDraw.Id,out字符);
obj=character.gameObject;
obj.SetActive(真);
}
其他的
{
obj=新游戏对象(“参与者”);
Character=obj.AddComponent();
character.Id=actorToDraw.Id;
Data.drawnCharacters.Add(character.Id,character);
}
返回obj;
}
私有游戏对象DrawNpc(ActorRapper actorToDraw)
{
配子对象对象;
if(Data.drawnNpcs.ContainsKey(actorToDraw.Id))
{
全国人大,;
Data.drawnNpcs.TryGetValue(actorToDraw.Id,out npc);
obj=npc.gameObject;
obj.SetActive(真);
}
其他的
{
obj=新游戏对象(“参与者”);
Npc Npc=obj.AddComponent();
npc.Id=actorToDraw.Id;
Data.drawnNpcs.Add(npc.Id,npc);
}
返回obj;
}
我已经尝试实现一个通用方法,它使用一个通用字典来尝试合并这两个方法。(我甚至不确定这是否会奏效,这只是一次天真的第一次尝试)

私有游戏对象GetDrawnActor(字典Drawnactor,ActorRapper actorToDraw),其中T:Actor
{
if(drawnActors.ContainsKey(actorToDraw.Id))
{
T演员;
drawnActors.TryGetValue(actorToDraw.Id,out actor);
GameObject obj=actor.GameObject;
obj.SetActive(真);
返回obj;
}
其他的
{
GameObject obj=新游戏对象(“参与者”);
var actor=obj.AddComponent();//我该怎么做??
actor.Id=actorToDraw.Id;
添加(actor.Id,actor);
返回obj;
}
}
注释行就是它失败的地方


编辑:这真是愚蠢的解决方案!我修改了代码,使其完全正确,除了答案中给出的令人不快的一行之外

我认为您唯一需要做的就是替换此代码:

Character character = obj.AddComponent<typeof(T)>(); 
Character Character=obj.AddComponent();
为此:

Character character = obj.AddComponent<T>(); 
Character Character=obj.AddComponent();

好的。我觉得自己很愚蠢。我通过了那条线,谢谢:@Toofy你不应该……我很高兴我帮了忙:)不客气!
Character character = obj.AddComponent<typeof(T)>(); 
Character character = obj.AddComponent<T>();