【发布时间】:2012-08-15 21:43:51
【问题描述】:
在 C# 中是否可以将泛型传递给重载方法,并让它解析为方法的非泛型版本?例如:
class Program {
static void Main(string[] args) {
A a = new A();
Process(a);
Console.ReadLine();
}
static void Process<T>(T item) {
Writer(item);
}
// Writer methods...
static void Writer<T>(T item) {
Console.WriteLine("Type: " + item.GetType());
Console.WriteLine("You lose");
}
static void Writer(A item) {
item.Write();
}
}
class A {
public void Write() {
Console.WriteLine("You found me!");
}
}
此代码输出:
类型:Foo.A
你输了
我想看看:
你找到了我!
有没有办法做到这一点,或类似的东西?我正在使用 C# 4。
【问题讨论】:
-
为什么不使用继承?
-
我怀疑如果没有明确的演员或一些额外的代码,这是可能的。在您的
Process<T>中,item是泛型类型T。编译器不可能发出对期望A作为类型的方法的调用。 -
@WesleyWiser,好吧,我基本上是在尝试使用它来调用采用
List<something>的方法...但我想如果我不能重载工作,我可以自己编写集合类,并为我想使用的每个something继承它。 -
@Eric 所以你想为
List<A>做点什么,为List<B>做点不同的事情? -
你可以创建一个
Process的重载,它需要一个A虽然这并不能解决一般问题。
标签: c# c#-4.0 generics overloading