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

C# 11泛型数学中如何使用数值字面量与数学常量?

C# 11泛型数学里用数值字面量和常量的正确姿势

整数字面量转泛型T的方法

像示例里的2这种int字面量,直接用肯定行不通——它没法隐式转换为泛型参数T。你可以借助INumber<T>接口提供的静态创建方法:

  • T.CreateChecked(2):转换溢出时直接抛出异常,适合需要严格校验的场景
  • T.CreateTruncating(2):溢出时自动截断数值,不会抛出异常
  • 要是小整数,也可以用T.One + T.One来凑出目标值,写法更直观

示例代码调整如下:

public T Circumference<T>(T radius) where T : INumber<T>
{
    var two = T.CreateChecked(2);
    return two * radius;
}

数学常量(比如π)的正确用法

如果是处理浮点类型的泛型,别再用Math.PI了——把泛型约束换成IFloatingPoint<T>就行。这个接口自带了T.PI、T.E这类静态常量,直接调用就对了。

结合两者的可运行完整代码:

public T Circumference<T>(T radius) where T : IFloatingPoint<T>
{
    var two = T.CreateChecked(2);
    return two * T.PI * radius;
}

额外补充

  • INumber<T>是所有数值类型的通用基接口,IFloatingPoint<T>继承自它,专门为浮点类型提供了更多数学相关API
  • 其他常用数学常量比如自然常数e,直接使用T.E即可
  • 字面量转换的几个方法里,CreateChecked是最安全的,能第一时间发现溢出问题;如果不需要溢出校验,也可以用CreateSaturating或CreateTruncating

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:16