You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现INumber<T>与int的乘法运算?

如何实现泛型中TResult与int的乘法运算?

问题:如何实现最后一行中与int的乘法运算(z * 2)?

以下是报错的原始代码:

public static TResult Test<TResult>() where TResult : INumber<TResult>
{
    TResult x = TResult.AdditiveIdentity;
    TResult y = TResult.MultiplicativeIdentity;
    TResult z = x * y;
    TResult z2 = z * 2; // <--- 此处出现CS0019错误:“运算符 * 无法应用于类型为'TResult'和'int'的操作数”
    return z2;
}

尝试过的方案及问题

有人建议添加IMultiplyOperators<TResult, int, TResult>接口约束,但会导致decimal类型无法兼容:

public static void Tester()
{
    Test<decimal>(); // CS0315错误:类型decimal无法用作类型参数TResult……不存在装箱转换
}

目前采用的方案是注入乘法函数:

public static TResult Test<TResult>(Func<TResult, int, TResult> mul) where TResult : INumber<TResult>
{
    TResult x = TResult.AdditiveIdentity;
    TResult y = TResult.MultiplicativeIdentity;
    TResult z = x * y;
    TResult z2 = mul(z, 2);
    return z2;
}

更优解决方案:将int转换为TResult类型后相乘

问题核心是INumber<TResult>仅保证同类型乘法支持,未直接提供跨int的乘法能力。我们可以把int值转换为TResult类型,再执行同类型乘法,既不需要额外约束,又能兼容所有INumber<TResult>实现类(包括decimal)。

方式1:使用TResult.Create(.NET 7+推荐)

public static TResult Test<TResult>() where TResult : INumber<TResult>
{
    TResult x = TResult.AdditiveIdentity;
    TResult y = TResult.MultiplicativeIdentity;
    TResult z = x * y;
    // 直接从int创建TResult实例
    TResult factor = TResult.Create(2);
    TResult z2 = z * factor;
    return z2;
}

方式2:使用Parse兼容旧版本

public static TResult Test<TResult>() where TResult : INumber<TResult>
{
    TResult x = TResult.AdditiveIdentity;
    TResult y = TResult.MultiplicativeIdentity;
    TResult z = x * y;
    // 将int的2转换为TResult类型
    TResult factor = TResult.Parse("2", null);
    TResult z2 = z * factor;
    return z2;
}

方案优势说明

  • 无需额外接口约束:避免了decimal等类型不兼容IMultiplyOperators<TResult, int, TResult>的问题
  • 调用更简洁:不需要调用方传入乘法逻辑,降低使用成本
  • 兼容性全覆盖:支持decimal、int、double等所有实现INumber<TResult>的数值类型

验证兼容性示例:

public static void Tester()
{
    Test<decimal>(); // 正常运行
    Test<int>();     // 正常运行
    Test<double>();  // 正常运行
}

内容的提问来源于stack exchange,提问作者Wouter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 09:17:05