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

问题描述

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

方法1

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

方法2

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

以下操作无效,并给出“ a是变量,但像类型一样使用” 错误。除此之外,我什至无法想象如何调用方法/在第一个参数中输入什么。

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

DoSomething<Bus>(Bus,"str");
DoSomething<Car>(Car,"str");
  1. 其他帖子建议使用MakeGenericmethod。这是唯一的方法吗? Use variable as Type
  2. 如果我希望这些方法返回List<T>(汽车/公交车)而不是void,那么如何将#1解决方案与泛型一起使用?

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

解决方法

您使用了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提出了一个有趣的观点

很难说出您是否实际上是在尝试将类型传递给Methods参数:

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

如果您不需要使用实例,则无需传递实例。只需使用通用参数

public void DoSomething<T>(string str)

...

DoSomething<Bus>("str");
,

似乎您输入有误,或者列表定义不正确

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");

也许这有帮助...