使用MonoDevelop 4.0.1编写Unity 4.5.2f1
的代码以下代码是我正在使用的代码的一部分,所有变量都已使用Debug.Log
进行检查,并且它们全部(单独)返回正确的值。
当我在Unity中刷新脚本资源时,收到以下错误消息:
内部编译器错误。有关更多信息,请参阅控制台日志。输出为:错误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'未定义或 进口
以下是导致此错误的脚本部分(简化):
注意:我无法将我的功能分解为多个小功能。 我的功能必须保持原样我可以根据需要编辑return语句
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, ...};
我找到了here。我不能使用Tuples作为Unity 4 MonoDevelop不支持它(根据this帖子)用户发布的地址:
不,Unity不支持元组。也许当Unity升级其Mono版本以支持.NET Framework 4中的功能时。
最后,我想在OnGUI()
函数中实现以下代码:
myFloat = myFunction.myFloat;
myString = myFunction.myString;
myInt = myFunction.myInt
非常感谢任何帮助, 谢谢
答案 0 :(得分:3)
您遇到了与Tuples相同的问题。 dynamic
是在.Net Framework 4.0中引入的,需要动态语言运行时(DLR),它不会出现在Unity的Mono版本中。
话虽如此,根据你在这里的背景你的说明陈述"我的功能必须保持原样我可以根据需要编辑return语句"表明您根本不需要当前的设置。我真的无法理解为什么你不能使用一个对象来保存这些值(你使用的名称很难为一个例子提供逻辑名称):
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;
}