如何解决使用像类型/通用方法这样的变量 方法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");
- 其他帖子建议使用
MakeGenericMethod
。这是唯一的方法吗? Use variable as Type - 如果我希望这些方法返回
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");
也许这有帮助...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。