我有以下代码,我无法获得数组的长度
数组大小在单位检查器中定义。错误是
错误Item' does not contain a definition for
长度'
public class Item : System.Object
{
public string name;
public int Radius = 1;
public GameObject obj;
}
public class Gen : MonoBehaviour {
public Item[] Items;
int iNum = Items.Length; // gives me an error
}
我觉得这个问题正在盯着我,但那是其中的一天......
答案 0 :(得分:4)
问题是您要从另一个字段的属性中分配字段。字段在构造时初始化。为了得到你想要的东西,需要从属性或方法中访问长度,如:
public class Item : System.Object
{
public string name;
public int Radius = 1;
public GameObject obj;
}
public class Gen : MonoBehaviour {
public Item[] Items;
private int iNum { get { return Items.Length; /*add null check here to be safe*/ } }
}
答案 1 :(得分:3)
问题是您使用另一个字段声明了字段初始值设定项。您可以通过创建一个对象立即获得所需的内容,然后随时访问获取Items
的长度,如下所示:
Items.Length
答案 2 :(得分:2)
您必须初始化数组才能使用此功能。
public Item[] Items = new Item[] { *ADD OBJECTS* };
答案 3 :(得分:2)
问题是我们如何初始化field
。
引自MSDN:
实例字段不能用于初始化其他实例字段 在方法之外。如果您尝试在a之外初始化变量 方法,考虑在类内执行初始化 构造
解决这个问题的一种方法是:
public class Gen : MonoBehaviour
{
public Item[] Items { get; set; } = new Item[] { };
int iNum = -1;
//Awake is called once by Unity since Gen inherits from MonoBehaviour
public void Awake()
{
iNum = Items.Length;
}
}
答案 4 :(得分:0)
Items
- Sub ADOFromExcelToAccess()
' exports data from the active worksheet to a table in an Access database
' this procedure must be edited before use
Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
' connect to the Access database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=C:\FolderName\DataBaseName.mdb;"
' open a recordset
Set rs = New ADODB.Recordset
rs.Open "TableName", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 3 ' the start row in the worksheet
Do While Len(Range("A" & r).Formula) > 0
' repeat until first empty cell in column A
With rs
.AddNew ' create a new record
' add values to each field in the record
.Fields("FieldName1") = Range("A" & r).Value
.Fields("FieldName2") = Range("B" & r).Value
.Fields("FieldNameN") = Range("C" & r).Value
' add more fields if necessary...
.Update ' stores the new record
End With
r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
为空。您正在声明变量(占位符),但您永远不会将其设置为新数组。
请参阅https://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx
答案 5 :(得分:0)
您需要将Items数组变量赋予数组。你唯一定义一个变量的项目,它包含一个Item的数组,但实际上什么也没有。
此外,您无法在类变量声明中调用Items.Length
。正如程序员所说,它必须在方法或财产中完成。因为它是运行时代码。所以你的Gen类应该看起来像:
public class Gen : MonoBehaviour
{
public Item[] Items = new Item[] { }; // Now Items has an array
int iNum;
void Awake()
{
iNum = Items.Length; // iNum will in this case will be zero, because the array is empty.
}
}