使用像类型/通用方法这样的变量
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");
- 其他帖子建议使用
MakeGenericMethod
。这是唯一的方法吗?
- 如果我希望这些方法 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");
我正在尝试重构以下两种方法
方法一
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");
- 其他帖子建议使用
MakeGenericMethod
。这是唯一的方法吗? - 如果我希望这些方法 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");