从参数推断通用类型

时间:2019-07-30 23:26:31

标签: c# generics

有什么方法可以动态推断类型参数,以便将一个对象的类型用作另一个对象类型?

我有一个称为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

1 个答案:

答案 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);

一切都应该正常工作。

您当然可以将工厂函数放在所需的任何类上。