.net Unity不接受System.Numerics参考

tzcvj98z  于 2023-06-25  发布在  .NET
关注(0)|答案(3)|浏览(159)

我一直在努力在MonoDevelop中添加BigInteger以允许非常大的数字,然而System.Numerics给我带来了很多麻烦。我已经添加了.dll引用,iv 'e确保所有其他内容都被正确引用,但我仍然得到这个错误:

Assets/Scripts/Click.cs(4,14): error CS0234: The type or namespace name `Numerics' does not exist in the namespace `System'. Are you missing an assembly reference?

下面是我尝试使用Numerics的类:

using UnityEngine;
using System.Collections;
using System;
using System.Numerics;

public class Click : MonoBehaviour {

    public UnityEngine.UI.Text PixelsDisplay;
    public UnityEngine.UI.Text PPC;
    public double pixels = 0.0;
    public double ppc = 1.0; 

    void Update(){
        PixelsDisplay.text = "Pixels: " + pixels.ToString ("#,#");
        if (pixels >= 10000000) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000, 2) + "M";
        }
        if (pixels >= 1000000000) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000, 2) + "B";
        }
        if (pixels >= 1000000000000) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000, 2) + "T";
        }
        if (pixels >= 1000000000000000) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000000, 2) + "Qd";
        }
        if (pixels >= 1000000000000000000) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / 1000000000000000000, 2) + "Qt";
        }
        if (pixels >= BigInteger.Parse("1000000000000000000000")) {
            PixelsDisplay.text = "Pixels: " + Math.Round(pixels / BigInteger.Parse("1000000000000000000000"), 2) + "Sx";
        }

        PPC.text = "PPC: " + ppc.ToString ("#,#");
        //TODO
    }

    public void Clicked(){
            pixels += ppc;
    }
}

下面是一张图片,展示了我所有的参考资料:

我搜索过类似的问题,但给出的答案不直接处理System.Numerics,通常不使用MonoDevelop。谢谢你的帮助!

mf98qq94

mf98qq941#

System.Numerics没有在Unity使用的Mono风格中实现。
所以你不能使用这个命名空间。请记住,Unity使用的Mono是自定义的,并且部分兼容. NET 2.0。
MonoDevelop或VisualStudio将允许您添加所需的DLL,并且不会抛出任何错误,但Unity会。
兼容性列表here

jhkqcmku

jhkqcmku2#

你可以尝试从https://github.com/Microsoft/referencesource复制你想要的类-它可能会演变成复制/修补越来越多的文件,或者它可能是相当简单的。我让Complex.cs只做了一两个修改就可以工作了。

3zwtqj6y

3zwtqj6y3#

将. DLL包含到Unity中对初学者来说是一个小噩梦;主要原因是Unity比当前的C#和.Net版本落后几个版本。
如果必须包含.DLL,只要该.DLL与.DLL的所有依赖项一起被引用,并且这些依赖项的所有依赖项都被引用,就可以完成此操作。如果任何依赖项超过.Net Standard 2.1或.Net Framework 4.7(我认为),那么你最终会遇到兼容性问题。
话虽如此,这不是不可能的,它只是一个耗时的驱魔。
实现你想要的目标的步骤:
1.将System.Numerics.DLL放入项目中,确保它与.Net Standard 2.0或2.1兼容;
1.找到System.Numerics依赖项,遍历每个依赖项;
1.对于每个依赖项,请执行此列表中的步骤1-3。
假设它们都是兼容的,并且包含了所有依赖项,Unity应该能够处理.DLL,就像它本身是兼容的一样。
你可能面临的挑战是,“为什么”.DLL不兼容。如果由于版权或许可问题而将子依赖项排除在Unity之外,那么您可能会遇到法律的问题等等。
对于步骤1-3,通常可以找到NuGet上的依赖项列表。这可能不适用于所有的. DLL,但对大多数。

相关问题