在.NET Core中(据我所知,是所有版本),System.MathF类拥有所有System.Math方法的浮动版本.

此外,在.NET7中,数值类型添加了静态数学方法,例如Sin.

在下面的代码片段中,y和z的结果都是float:

float f = 1.2f;
var y = MathF.Sin(f);
var z = float.Sin(f);

我的问题是:为什么要重复?对于Float类型的较新的数学方法,有没有一些我没有看到的好处,这些好处已经通过System.MathF实现了?

推荐答案

MathF及其MathF.Sin方法是在.NET Core 2.0中引入的:

适用于:

Product Versions
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8
.NET Standard 2.1

Single.Sin(或float.Sin)是在.NET 7中引入的:

适用于:

Product Versions
.NET 7, 8

generic math的介绍和正在实施的static abstract interface method ITrigonometricFunctions<TSelf>.Sin(TSelf).在内部(在目前的实施中),它使用MathF.Sin-source.dot.net.显然,出于兼容性原因,MathF.Sin不能被移除(即使实现将被移至Single.Sin)

在浮点类型上,更新的数学方法有没有一些我没有看到的好处,这些好处还没有通过System.MathF实现?

可以--它们可以在泛型方法中使用(带有适当的泛型约束),这就是引入泛型数学功能的原因:

public T MyFunc<T>(T value) where T : ITrigonometricFunctions<T>
{
    var res = T.Sin(value);
    return res;
}

和用法:

float f = 1;
MyFunc(f);

Csharp相关问答推荐

如何打印已添加到List的Linq值,而不是C#中的:System.Collections.Generic.List ' 1[System.Int32]?

子组件:如何根据另一个组件的状态启用输入

Regex在c#中完全匹配

C#将参数传递给具有变化引用的变量

ITypeLib2.GetLibStatistics()在C#中总是抛出AccessViolationException

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

在使用StringBuilder时,如何根据 colored颜色 设置为richTextBox中的特定行着色?

使用CollectionView时在.NET Maui中显示数据时出现问题

当我将`ConcurentDictionary`转换为`IDictionary`时,出现了奇怪的并发行为

获取混淆&Quot;模糊引用&Quot;错误

Blazor服务器项目中的Blazor/.NET 8/Web API不工作

Visual Studio如何使用当前的框架?

具有嵌套属性的IGGroup

如何在Xamarin.Forms中检索PanGesture事件的位置?

避免在特定区域中设置Visual Studio代码的自动格式

C#-如何将int引用获取到byte[]

ASP.NET核心MVC|如何在控制器方法之间传递值

在c#中,使用Okta和Blazor时,LocalReDirect()陷入循环,出现错误&请求太多.

SendInput无法在C#中正确模拟键盘