gpt4 book ai didi

c# - 您可以将通用对象分组到列表中吗?

转载 作者:行者123 更新时间:2023-11-30 17:43:37 24 4
gpt4 key购买 nike

我制作了一台机器,可以将 cookies 从一种类型转换为另一种类型。

每个 BiscuitTransformer 都有一个类似于 DigestiveBiscuitTransformer 的方法:

IBiscuit Transform(DigestiveBiscuit digestiveBiscuit)方法。

是否可以使用通用接口(interface)对这些进行分组,因为每个变压器的类型都不同,例如巧克力 cookies 变形金刚

IBiscuit Transform(ChocolateBiscuit chocolateBiscuit)

GingerNutBiscuitTransformer:

IBiscuit Transform(GingerNutBiscuit gingerNutBiscuit)

理想情况下,我想要实现的是一个 BiscuitTransformationManager,它将接受任何类型的 cookies ,并返回一个 IBiscuit。

它会将所有变压器加载到 List<IBiscuitTransformer> 中然后 IBiscuitTransformer 也会公开 Type InputBiscuitType {get;}所以您可以将它与您收到的 cookies 类型进行比较:

cookies 转换管理器:

IBiscuit Transform<T>(T biscuit)
{
var transformer = LoadTransformers().Single(c => c.InputBiscuitType == typeof(T));

return transformer.Transform(biscuit);
}

我认为行不通,因为 Transformer 需要的是具体类型,而不是 T。

问题是我不知道如何对它们进行分组,如果我创建接口(interface)方法 Transform<T>我不确定如何实现它,因为 T 始终是 DigestiveBiscuitDigestiveBiscuitTransformer但是代码会接受任何东西,这是没有意义的。

有什么想法吗?

最佳答案

我认为您在这里不需要泛型。

简单地说:

IBiscuit Transform(IBiscuit biscuit)
{
var transformer = LoadTransformers().Single(c => c.InputBiscuitType == biscuit.GetType());

return transformer.Transform(biscuit);
}

但是,当然,这意味着您的每个转换器都应该具有匹配的方法签名,而不是特定于类型,我认为这实际上是正确的方法。

所以代替

IBiscuit Transform(DigestiveBiscuit digestiveBiscuit)

将该转换器的签名(以及其他签名)更改为:

IBiscuit Transform(IBiscuit digestiveBiscuit)

我认为这种设计比尝试使用泛型更简洁。

关于c# - 您可以将通用对象分组到列表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30648312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com