有什么方法可以动态推断类型参数,以便将一个对象的类型用作另一个对象类型?
我有一个称为ObjectPrinter的通用类型,该类型采用与构造函数中相同类型的列表。不必声明类型,而只需从参数中推断出类型,就很整齐。
// This is how i do it. But since myFruits is a list of fruits could not the type Fruit be infered automatically?
List<Fruits> myFruits = GetFruits();
var fruitPrinter = new ObjectPrinter<Fruit>(myFruits);
// Id like to to this
List<Fruits> myFruits = GetFruits();
var fruitPrinter = new ObjectPrinter(myFruits); // and get a ObjectPRinter of type Fruit
答案 0 :(得分:1)
C#中的构造函数显然不是泛型-您无法直接执行自己想做的事情。只有成员函数可以具有通用参数。
但是,这告诉您可以做什么:使用工厂函数而不是构造函数。像这样:
public class PrinterFactory {
public static ObjectPrinter CreatePrinter<T>(List<T> things) {
return new ObjectPrinter<T>(things);
}
}
然后,您可以将呼叫代码更改为:
List<Fruit> myFruits = GetFruits();
var fruitPrinter = PrinterFactory.CreatePrinter(myFruits);
一切都应该正常工作。
您当然可以将工厂函数放在所需的任何类上。