将类型列表作为泛型参数传递

本文关键字:泛型 参数传递 类型 列表 | 更新日期: 2023-09-27 18:30:25

我想知道我是否可以将类型列表作为通用参数传递。我有一个类,需要获取无限数量的类型并使用它们。像这样:

class o<TTypeCollection>
{
    private void someMethod()
    {
        repository.Save < TTypeCollection.First() > (MyCollectionViewSource.CurrentItem as TTypeCollection.First());
    }
}

将类型列表作为泛型参数传递

C# 中无法以C++风格进行模板元编程,但您可以使用反射来完成:

private void someMethod() {
    var genericSave = repository // This can be done during initialization
        .GetType()
        .GetMethods()
        .Where(m => m.Name == "Save" && m.IsGenericMethodDefinition);
    var t = MyCollectionViewSource.CurrentItem.GetType();
    genericSave
        .MakeGenericMethod(new[] {t})
        .Invoke(new object[] {MyCollectionViewSource.CurrentItem});
}