标签: .net-generic-math

如何将 INumber<T> 与 int 相乘?

z * 2我应该如何在最后一行实现 int ( ) 的乘法?

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; // <--- this gives the CS0019 error "The operator * cannot be applied to operands of type 'TResult' and 'int'
    return z2;
}
Run Code Online (Sandbox Code Playgroud)

--- 建议的解决方案是添加一个接口,但它打破了这一点: IMultiplyOperators<TResult, int, TResult>

public static void Tester()
{
    Test<decimal>(); // CS0315 Tye type decimal cannot be used as …
Run Code Online (Sandbox Code Playgroud)

c# math numbers .net-7.0 .net-generic-math

20
推荐指数
3
解决办法
2006
查看次数

如何使用通用数学生成常量值

我有以下通用数学函数:

private static T Fade<T>(T t)
    where T : IFloatingPoint<T>
{
    return t * t * t * (t * (t * 6 - 15) + 10);
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译,因为61510不是 类型T

我能想到的最好的解决方案是定义一个静态类,如下所示:

private static class GenericValues<T>
    where T : IFloatingPoint<T>
{
    public static readonly T Two = T.One + T.One;
    public static readonly T Three = Two + T.One;
    public static readonly T Four = Three + T.One;
    public static readonly T Five …
Run Code Online (Sandbox Code Playgroud)

c# generics .net-7.0 .net-generic-math

8
推荐指数
1
解决办法
238
查看次数

通用数学如何从 INumber 转换为“具体”类型(int/double/etc)

INumber<T>假设我们有一个接受并返回的通用方法int

// process val and return as int
static int DoSomething<T>(T val) where T : INumber<T> => ... 
Run Code Online (Sandbox Code Playgroud)

如何将其T投射到int.

.net c# c#-11.0 .net-7.0 .net-generic-math

7
推荐指数
1
解决办法
1301
查看次数

C# 11 - 通过向此方法添加 IAdditionOperators 我们获得了什么?

我刚刚将 Visual Studio 2022 升级到 .NET7,其中包括 C# 11。我有兴趣尝试新的静态抽象接口方法,因此按照那里的教程进行操作。

本文展示了如何定义PointTranslation记录使用新IAdditionOperators<>接口...

public record Translation<T>(T XOffset, T YOffset) where T : IAdditionOperators<T, T, T>;

public record Point<T>(T X, T Y) where T : IAdditionOperators<T, T, T> {
  public static Point<T> operator +(Point<T> left, Translation<T> right) =>
    left with { X = left.X + right.XOffset, Y = left.Y + right.YOffset };
}
Run Code Online (Sandbox Code Playgroud)

这使您能够执行此操作...

var pt = new Point<int>(3, 4);
var translate = new Translation<int>(5, 10);
var …
Run Code Online (Sandbox Code Playgroud)

c# c#-11.0 .net-7.0 .net-generic-math

5
推荐指数
1
解决办法
479
查看次数

如何在 .NET 7 中为 INumber 提供通用变量?

我们可以使用.NET 7中的新INumber<TSelf>接口来引用任何数字类型,如下所示:

using System.Numerics;

INumber<int> myNumber = 72;
INumber<float> mySecondNumber = 93.63f;
Run Code Online (Sandbox Code Playgroud)

但是,由于 中的类型限制INumber,我们无法拥有可以保存任何数字类型的通用引用。以下代码无效:

using System.Numerics;

INumber myNumber = 72;
myNumber = 93.63f;
Run Code Online (Sandbox Code Playgroud)

我怎样才能拥有任何数字对象的数组并调用需要对象的方法INumber<TSelf>

using System.Numerics;

object[] numbers = new object[] { 1, 2.5, 5, 0x1001, 72 };

for (int i = 0; i < numbers.Length - 1; i++)
{
    Console.WriteLine("{0} plus {1} equals {2}", numbers[i], numbers[i + 1], AddNumbers(numbers[i], numbers[i + 1]));
}

static T AddNumbers<T>(T left, T right) where T : …
Run Code Online (Sandbox Code Playgroud)

.net c# .net-7.0 .net-generic-math

5
推荐指数
1
解决办法
3007
查看次数

为什么 IParseable&lt;T&gt; 需要递归?

为什么要IParseable<T>对 施加T : IParseable<T>约束T?这个递归约束有什么用呢? 在此输入图像描述

c# recursion interface c#-11.0 .net-generic-math

1
推荐指数
1
解决办法
566
查看次数

解析运算符“+”不能应用于“T”和“T”类型的操作数

我正在尝试创建一个通用计算器类,它可以支持非常基本的算术运算,例如 add 、 sub 和 mul 。但我收到下面提到的错误。我感觉我需要在“T”上添加通用约束,以允许仅在支持 + 运算符的类型上进行操作。但无法找出解决方案。如果您能提供很好的解释来帮助我理解它的这个基本部分,那将会有很大的帮助。

“运算符‘+’不能应用于‘T’和‘T’类型的操作数

这是添加操作的代码。请提出解决此问题的解决方案。

**//this approach works** 
using System.Numerics;
namespace dotnet_basic;
public class Calculator
{
    public T Add<T>(T num1, T num2)
      where T : INumber<T> => num1 + num2;

    public T Subtract<T>(T num1, T num2)
        where T : INumber<T> => num2 - num1;
}


**//Corrected the second approach now even this approach works**
namespace dotnet_basic;
public class CalculatorNew<T> where T : INumber<T>
{

    public T Add(T num1, T num2)
    {
        return num1 + …
Run Code Online (Sandbox Code Playgroud)

c# .net-generic-math

1
推荐指数
1
解决办法
104
查看次数