C#-Unity内部编译器错误:“;System.Runtime.CompilerServices.CallSite”;

本文关键字:System Runtime CallSite CompilerServices 内部 编译器 错误 C#-Unity | 更新日期: 2023-09-27 18:24:40

使用MonoDevelop 4.0.1为Unity 4.5.2f1 编码

下面的代码是我正在使用的代码的一部分,所有变量都使用Debug.Log进行了检查,它们都(单独)返回了正确的值。

当我在Unity中刷新我的脚本资产时,我得到以下错误消息:

内部编译器错误。有关详细信息,请参阅控制台日志。输出为:error CS0518:预定义类型"System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型未定义System.Runtime.CompilerServices.CallSite 1'或进口

错误CS0518:预定义的类型`System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型未定义System.Runtime.CompilerServices.CallSite 1'或进口

错误CS0518:预定义的类型`System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型未定义System.Runtime.CompilerServices.CallSite 1'或进口

错误CS0518:预定义的类型`System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型未定义System.Runtime.CompilerServices.CallSite 1'或进口

错误CS0518:预定义的类型`System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型未定义System.Runtime.CompilerServices.CallSite 1'或进口

错误CS0518:预定义的类型`System.Runtime.CompilerServices.CallSite"未定义或导入

错误CS0518:预定义的类型System.Runtime.CompilerServices.CallSite 1'未定义或进口

以下是我的脚本(简化)中导致此错误的部分:

注意:我不能把我的函数分解成多个小函数我的函数必须保持原样我可以根据需要编辑返回语句

using UnityEngine;
using System.Collections;
using Random = UnityEngine.Random;
public class myScene : MonoBehaviour
{
    private dynamic someVar;
    private float myFloat = 1.1f;
    private string myString = "string";
    private int myInt = 2;
    void OnGUI()
    {
        someVar = myFunction(myFloat, myString, myInt);
    }
    //First Function
    public dynamic myFunction(float myFloat, string myString, int myInt)
    {
        //Do something
        dynamic myOtherFunction(myFloat, myString, myInt);
        float myFloat = myOtherFunction.myFloat;
        string myString = myOtherFunction.myString;
        int myInt = myOtherFunction.myInt;
        //Do something
        return new {myFloat = myFloat, myString = myString, myInt = myInt};
    }
    //Second function
    public dynamic myOtherFunction(float myFloat, string myString, int myInt)
    {
        //Do something
        return new {myFloat = myFloat, myString = myString, myInt = myInt};
    }
}

我一直无法弄清楚问题是什么(是的,即使使用谷歌,尽管出现了一些可能的解决方案,但我尝试了一下,它们似乎并没有解决我的问题)。

我需要能够从另一个函数向OnGUI()函数返回多个变量。我在这里找到的return new{varName = value, ...};使用的方法。我不能使用Tuples,因为Unity 4 MonoDevelop不支持它(根据这篇帖子),用户发帖:

不,Unity不支持Tuples。也许当Unity升级其Mono版本以支持.NETFramework4中的功能时。

最后,我想在OnGUI()函数中实现以下代码:

myFloat = myFunction.myFloat;
myString = myFunction.myString;
myInt = myFunction.myInt

对此的任何帮助都将不胜感激,感谢

C#-Unity内部编译器错误:“;System.Runtime.CompilerServices.CallSite”;

您遇到了与Tuples相同的问题。dynamic是在.Net Framework 4.0中引入的,它需要动态语言运行时(DLR),而Unity版本的Mono中没有此功能。

话虽如此,考虑到你这里的上下文,你的注释"我的函数必须保持原样,我可以根据需要编辑返回语句"表明你根本不需要当前的设置。我真的不明白为什么你不能使用对象来保存值(例如,你使用的名称使你很难想出逻辑名称):

    public class MyFunctionResult
    {
        public readonly float MyFloat;
        public readonly string MyString;
        public readonly int MyInt;
        public MyFunctionResult(float myFloat, string myString, int myInt)
        {
            MyFloat = myFloat;
            MyString = myString;
            MyInt = myInt;
        }
    }
    void OnGUI()
    {
        float myFloat = 1;
        string myString = "";
        int myInt = 2;
        var finalResult = myFunction(myFloat, myString, myInt);
        Debug.Log(finalResult.MyFloat); //...
    }
    //First Function
    public MyFunctionResult myFunction(float myFloat, string myString, int myInt)
    {
        //Do something
        var myOtherFunctionResult = myOtherFunction(myFloat, myString, myInt);
        float myFloatResult = myOtherFunctionResult.MyFloat;
        string myStringResult = myOtherFunctionResult.MyString;
        int myIntResult = myOtherFunctionResult.MyInt;
        //Do something
        return new MyFunctionResult(myFloat, myString, myInt);
    }
    //Second function
    public MyFunctionResult myOtherFunction(float myFloat, string myString, int myInt)
    {
        //Do something
        return new MyFunctionResult(myFloat, myString, myInt);
    }

我真的很努力地试图找到一个甚至稍微有点合理的理由,但没能(但我想知道你的简化是否隐藏了一个隐藏的问题)。话虽如此,您也可以使用out参数,但我肯定会称之为误用:

public dynamic myFunction(float myFloat, string myString, int myInt)
{
    //Do something
    float myFloat;
    string myString;
    int myInt;
    myOtherFunction(out myFloat,out myString,out myInt);
    ...
}
public void myOtherFunction(out float myFloat, out string myString, out int myInt)
{
    myFloat = someVal;
    myString = otherVal;
    myInt = thirdVal;
    return;
}
相关文章: