首页 > 后端开发 > C++ > C# 可以实现部分泛型类型推断吗?如果可以,如何实现?

C# 可以实现部分泛型类型推断吗?如果可以,如何实现?

Barbara Streisand
发布: 2024-12-31 02:55:09
原创
486 人浏览过

Can C# Implement Partial Generic Type Inference, and If So, How?

可以在 C# 中实现部分泛型类型推断吗?

概述

本文探讨了在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板