这是我的code:
public class Program
{
public static void Main(string[] args)
{
Factory factory = new Factory();
}
}
public class Factory
{
public Factory() {
Animal animal = new Animal();
MVCSender<Animal>(animal);
}
public void MVCSender<T>(object elem) {
WebAPIReceiver<T>(elem);
}
public void WebAPIReceiver<T>(object elem) {
WebAPIProcesser((T)elem);
}
public void WebAPIProcesser(Animal elem) {
elem.Speak();
}
}
public class Animal
{
public Animal() {}
public void Speak()
{
Console.WriteLine("Animal Speak!");
}
}
我在函数之间传递T
,在“端点”上,我尝试使用我传递过函数的object
类型来转换泛型T
类型。
这是一个自学问题,整体没有任何意义。
WebAPIProcesser((T)elem)
投放Animal
到T
? template <class T>
(例如在C++
上)?答案 0 :(得分:4)
public void WebAPIReceiver<T>(object elem) {
WebAPIProcesser((T)elem);
}
与C ++模板相比,只有当您实际执行时,它们才会失败,C#会确保 的任何调用必须是合法的。
在您的情况下:虽然您的案例中的T
是Animal
,但编译器必须确保您的方法适用于任何 { {1}}。它没有。对于任何非T
,它都会失败。所以编译器会给你一个错误。
答案 1 :(得分:0)
如果你回答我的答案,你告诉我如何转换 从模板T到字符串(即推断Animal到string&#34; Animal&#34;)你 会得到我的接受&#34;解答!
void Main()
{
Foo<Animal> foo = new Foo<Animal>();
Animal animal = new Animal();
Console.Write(foo.Get(animal));
}
public class Animal
{
}
public class Foo<T> {
public string Get(T entity)
{
return entity.GetType().Name;
}
}