难倒在这一个上。我有这个方法:
private static List<IBiscuitTransformer> GetBiscuitTransformers()
{
var type = typeof(IBiscuitTransformer);
var transformers = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes().Where(c => !c.IsInterface))
.Where(p => type.IsAssignableFrom(p))
.Select(c => (IBiscuitTransformer)Activator.CreateInstance(c))
.ToList();
return transformers;
}
这很有效。我有几个BiscuitTransformer的实现,而且都是饼干善良。
然而,问题在于我希望IBiscuitTransformer
拥有一个以List<T> biscuitBarrelBiscuits
作为参数的方法。这似乎迫使我IBiscuitTransformer
进入IBiscuitsTransformer<T>
,这是我真正不想要的,但可能是不可行的。
一旦我这样做,我就不知道如何修改上面的代码,因此我可以创建实现IBiscuitTransformer<T>
的所有类的实例。可能是因为我不知道T
?或者我无法弄清楚语法。但是我不需要知道T
来创建一个实例,它只是我想要在T
中进行的方法调用。只有对象TransformBiscuit(List<T> biscuitBarrelBiscuits)
上的方法才是通用的,而不是类本身,所以应该可以用Activator创建它的实例。
但我无法弄清楚如何做到这一点,或者它是否可能。有什么想法吗?
为了解释我想要做什么,我有一堆饼干变形金刚,它们可以吸收饼干并对其进行改造。每种类型的饼干都有一个,我将它们通过反射加载到一个数组中,这样当饼干进来时我可以选择使用哪一个。变换器都有一个共同的界面,上面有一个TransformBiscuit
方法,但因为他们收集了不同类型的饼干的集合,它必须是一个列表,以便他们都能够使用相同的界面。
我不确定我是否能够弄清楚这个概念,或者我是否从根本上做错了。
答案 0 :(得分:2)
使方法通用。
void TransformBiscuit<T>(List<T> biscuitBarrelBiscuits)
这假设BiscuitTransformer
的单个实例能够转换您传入的任何饼干顶部。