获取数组的长度

时间:2016-11-02 21:03:28

标签: c# unity3d

我有以下代码,我无法获得数组的长度 数组大小在单位检查器中定义。错误是 错误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
}

我觉得这个问题正在盯着我,但那是其中的一天......

6 个答案:

答案 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.
    }
}