使用像类型/通用方法这样的变量

Use variable like type / Generic method

我正在尝试重构以下两种方法

方法一

public void DoSomething(Bus a, string str)
{
   var temp = new List<Bus>();
   ...
}

方法二

public void DoSomething(Car a, string str)
{
   var temp = new List<Car>();
   ...
}

以下不起作用,并给出 'a is a variable, but used like a type' 错误。除此之外,我什至无法想象如何调用这个方法/在第一个参数中放什么。

public void DoSomething<T>(T a, string str)
{
   var temp = new List<a>();
   ...
}

DoSomething<Bus>(Bus, "str");
DoSomething<Car>(Car, "str");
  1. 其他帖子建议使用MakeGenericMethod。这是唯一的方法吗?
  2. 如果我希望这些方法 return List<T>(汽车/公共汽车)而不是 void,我如何使用泛型的 #1 解决方案?

更新 正如我在评论中留下的那样 -> @ChetanRanpariya,那么如何调用这个方法呢? DoSomething(?, ?);

看来您输入有误,或者列表定义不正确

public void DoSomething<T>(T a, string str)
{
   // Incorrect
   var temp = new List<a>();

   // Correct
   var temp = new List<T>();

   // ...
}

DoSomething<Bus>(Bus, "str");
DoSomething<Car>(Car, "str");

也许这有助于...

您使用了 a(实例)而不是实际类型 T

public void DoSomething<T>(T a, string str)
{
   var temp = new List<T>(); // you need to use T here, it's the actual type
}

...

DoSomething<Bus>(myBus, "str");
DoSomething<Car>(myCar, "str");

其他资源

Generics (C# Programming Guide)

更新

41686d6564 提出了一个有趣的观点

很难判断您是否真的在尝试将类型传递到方法参数中:

DoSomething<Bus>(whatYouPassInHereWouldNeedToBeAnInstanceNotAtype,"str");`

如果不需要使用实例,则无需传入,使用泛型参数即可

public void DoSomething<T>(string str)

...

DoSomething<Bus>("str");