在函数中添加类型参数,以及类型的实现条件

本文关键字:类型 实现 条件 函数 添加 类型参数 | 更新日期: 2023-09-27 18:04:38

我想用一些棘手的输入参数写一个函数:这将是类型的参数,这些类型应该实现特定的接口。所以签名看起来像:

function void myFunction(string t,params Type[] types) where types:IMyInterface

当然不是这样的

请不要建议泛型,我希望有几种类型,但我不知道有多少。

在函数中添加类型参数,以及类型的实现条件

如果不使用泛型,就不能强制编译器为您做编译时检查。由于泛型不提供可变语法来处理这类类型参数列表,一种常见的解决方法是为具有不同数量类型参数的泛型提供多个重载,然后调用一个通用实现:

void myFunction(string t) {
    myFunctionImpl(t, new Type[0]);
}
void myFunction<T0>(string t) where T0:IMyInterface {
    myFunctionImpl(t, new[] { typeof(T0) });
}
void myFunction<T0,T1>(string t) where T0:IMyInterface,
                                       T1:IMyInterface {
    myFunctionImpl(t, new[] { typeof(T0), typeof(T1) });
}
...
void myFunction<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>(string t)
    where T0:IMyInterface,
          T1:IMyInterface,
          T2:IMyInterface,
          T3:IMyInterface,
          T4:IMyInterface,
          T5:IMyInterface,
          T6:IMyInterface,
          T7:IMyInterface,
          T8:IMyInterface,
          T9:IMyInterface {
    myFunctionImpl(t, new[] { typeof(T0), typeof(T1), typeof(T2), typeof(T3), typeof(T4), typeof(T5), typeof(T6), typeof(T7), typeof(T8), typeof(T9) });
}

这种方法允许您根据需要调用多达十个类型参数的myFunction