本文探讨了在 C# 中实现类型推断的挑战,重点关注部分泛型类型推断的局限性和潜在解决方案。
所描述的用例是扩展方法应该可用于特定基类,并且具有与方法参数相关的通用参数。但是,扩展方法还应该返回与调用它的特定后代相关的特定类型。
事实证明,C# 中不直接支持部分泛型类型推断。不过,有一些策略可以达到类似的结果。
方法 1:使用类型约束
语法类似于所需的代码可以使用类型约束来实现:
public static TReg Parameter<TReg, T>(this TReg p, string name, T value) where TReg : ParameterizedRegistrationBase
这种方法需要在调用期间指定两个泛型类型参数,这可能并不适合所有情况。
方法 2:在包装器中使用两个函数
此方法涉及将操作拆分为两个函数:
public static ThatAreWrapper<TSource> That<TSource>(this IEnumerable<TSource> source) { return new ThatAreWrapper<TSource>(source); } public class ThatAreWrapper<TSource> { // ... Implementation }
和:
listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
这个解决方法需要额外的步骤,但可以更灵活地指定结果类型。
方法 3:扩展基类
通过将扩展方法直接引入到基类中类,问题就可以避免了。但是,这种方法消除了将来在其他类上使用扩展方法的能力。
C# 中不直接支持部分泛型类型推断,但有一些解决方法可以提供类似的功能。具体使用方法取决于具体要求和所涉及的权衡。
以上是C# 可以实现部分泛型类型推断吗?如果可以,如何实现?的详细内容。更多信息请关注PHP中文网其他相关文章!