【发布时间】:2018-03-03 18:20:15
【问题描述】:
我知道这个问题可能已经被问过很多次了,我的标题可能需要一些帮助,所以请在将我指向重复项后随时关闭这个问题......只是目前不确定如何正确搜索答案。
我遇到了一种情况,变量可能需要保存ISolrOperations<Class1> 的实例,或者它可能需要保存ISolrOperations<Class2> 的实例。问题是没有接口的基本版本,因此没有类我可以将变量定义为(对象除外,它显然不知道ISolrOperations<T> 的方法)能够容纳任一类。
所以我知道的唯一解决方案是 a) 执行 if/else 语句,在其中我在一个块中使用 ISolrOperations<Class1> 做我需要的一切,在另一个块中使用 ISolrOperations<Class2> 做我需要的一切,即使每个块都会基本上包含重复的代码。或者 b) 我可以使变量动态化,而只是丢失一些我的代码的编译时验证。
我正在考虑是否有某种方法可以创建一个具有非泛型基的泛型包装类。也许基地必须将其视为一个对象,但使用反射......但我喜欢把它搞砸;如果我必须经历那个麻烦,还不如使用动态关键字。
是否有更“合适”的设计模式来处理这种情况?或者我是在动态或编写大量代码之间做出选择,只是为了让自己感觉自己做得“正确”,而动态确实是最实用的解决方案?
编辑:其实我不确定动态是否能解决这个问题:/
编辑 2:不...其他代码将 lambdas 与需要强制转换的变量一起使用,我显然不知道在编译时要转换成什么,所以这不起作用。
【问题讨论】:
-
你能不能创建基本的非泛型接口
ISolrOperations,它也将由泛型接口实现......然后你可以将正常调用路由到泛型接口......或者创建装饰器的想法...... . -
我希望。它来自第 3 方 dll。我的意思是它是开源的,所以理论上我可以,但我绝对没有时间。
-
另外一个想法虽然因为这是我用自己的代码做的第一件事(并且过去做过)。
-
我明白了。
interface的方法是什么? -
我唯一感兴趣的是“查询”