Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity C#数组类型错误(从unityscript转换时)_C#_Unity3d_Unityscript - Fatal编程技术网

Unity C#数组类型错误(从unityscript转换时)

Unity C#数组类型错误(从unityscript转换时),c#,unity3d,unityscript,C#,Unity3d,Unityscript,我试图将这段简化的代码从unityscript转换(并理解)为C#: 虽然这不是我想要的方式,但我希望能够将方法存储在数组中,但我找不到在C#中实现这一点的方法。这根本不可能吗? (示例)我正在尝试这样做: //In addition to what I posted above void Start() { actionList[i][0] = void FireBall(); } void FireBall() { Texture2D icon = Resources.Load("icon

我试图将这段简化的代码从unityscript转换(并理解)为C#:

虽然这不是我想要的方式,但我希望能够将方法存储在数组中,但我找不到在C#中实现这一点的方法。这根本不可能吗?
(示例)我正在尝试这样做:

//In addition to what I posted above
void Start()
{
actionList[i][0] = void FireBall();
}

void FireBall()
{
Texture2D icon = Resources.Load("icon_fireball") as Texture2D;
String description = new String("Shoot a ball of fire");

//etc
}
与Javascript不同,C#是强类型的,这意味着您不能将
对象
传递给请求
矩形
的方法。您必须给出该确切类型的方法,或从该类型派生的子类型

因此,与其

private object[][] actionList;
你应该

private Rectangle[][] actionList;
强类型语言执行大量编译时验证,以查看是否将错误的变量类型传递给错误的方法参数。优点有两个,首先,您不必在运行时执行测试来了解变量的类型是否正确。其次,它提供了一种简单的方法来查找代码中的错误,而无需运行代码的每一部分。如果它编译了,您已经完成了80%

但是,如果要在该数组中组合不同的类型,则有多种选择。您可以使用类似于
Tuple
的类来组合一组不具有匹配类型的对象,或者您可以将
对象
强制转换为
矩形
,然后再将其馈送给如下方法:

DrawButton((Rectangle)actionList[i][1]);

但是,如果强制转换无效,您将得到一个运行时断言。

这不是Java。它可能是Javascript,但不是Java。当我听到人们混淆“Java”和“Javascript”时,我会感到害怕。表面上有相似之处,但在最重要的方面,“Java”和“Javascript”是天壤之别。我编辑了这篇文章,并将标题改为“Javascript”。Thnx是为了快速回复!我在Unity中找不到关于元组的文档(不知道如何实现),但是转换为矩形是可行的。你会说这不是正确的方法吗?如果是这样,你会建议用什么来代替对象数组?Thnxagain@downdf:
Tuple
不是一个统一类,它是一个.NET4+类,但本质上,它只是一个围绕一组对象的通用包装器。比方说,您总是有一个矩形和一个字符串作为名称。您可以执行
列表
。这是一个始终包含字符串和矩形组合的列表。最好的方法是不用强制转换就可以进行管理,因为它只需要很少的运行时成本,而且通常会使代码更易于阅读,因为您知道什么是什么。但是如果你喜欢演员阵容,也可以。我编辑了我的作品,其中有一个相关的问题(希望这里的事情就是这样做的),如果你能看一下,我将不胜感激。干杯@下行:指的是一个空?你是说阵列中的一个空插槽?关键字为
null
。如
MyObject=null;如果(MyObject==null)
。就像我说的,变量是用C#输入的,你不需要在里面放一些东西,编译器就知道应该或者可以放什么。该死的,你太快了!不确定我是否完全理解你的答案,但我想我没有问清楚这个问题。我想问的是:你能在数组中存储一个方法吗?将OP“引用空白”编辑为“方法”。
private object[][] actionList;
private Rectangle[][] actionList;
DrawButton((Rectangle)actionList[i][1]);