所以我的问题是: 我正在尝试从位于Achievements脚本中的方法printAchiv()中的ArrayList上的Achiv类调用方法getName(),它显然不起作用。
以下是我在Achievements脚本中获取此行的错误消息: - > Debug.Log(“Achiv”+ i +“:”+ achivList [i] .getName());
输入
object' does not contain a definition for
getName'并且不输入 可以找到扩展方法getName' of type
object'(是吗? 缺少using指令或程序集引用?)
我只是想从集合中的obejct访问var“name”的值。
Achiv课程
using UnityEngine;
using System.Collections;
public class Achiv : MonoBehaviour {
public string name;
public Achiv(string name )
{
this.name= name;
}
public string getName()
{
return name;
}
}
成就剧本
using UnityEngine;
using System.Collections;
public class Achievements: MonoBehaviour {
public ArrayList achivList = new ArrayList();
void Start ()
{
achivList.Add (new Achiv("First name", "Descirptionn", false));
achivList.Add (new Achiv("Second name", "Descirptionnn", false));
printAchiv();
}
void printAchiv(){
for (int i = 0; i <= achivList.Count - 1; i++)
Debug.Log("Achiv "+i+": "+ achivList[i].getName());
}
}
答案 0 :(得分:3)
使用List<Achiv>
代替ArrayList
。 ArrayList
过时,不再使用,不应再使用。
ArrayList
的索引器会返回object
,这就是您收到错误的原因。请尝试以下方法。
public List<Achiv> achivList = new List<Achiv>();
除此之外,
List
,首选ReadOnlyCollection
或IEnumerable
。foreach
优先于for
。printAchiv
没有遵循正确的命名惯例,在c#中我们使用“CamelCase”,将其重命名为PrintAchiv
。Name
。答案 1 :(得分:1)
ArrayList与Objects一起运行。您需要将数组索引的结果转换为Achieve:
(achivList[i] as Achiv).getName()
答案 2 :(得分:0)
问题是ArrayList
中的元素存储为object
。因此achivList[i]
会返回object
,但不提供getName()
方法。
您可以添加演员阵容:
Debug.Log("Achiv "+i+": "+ (Achiv)achivList[i].getName());
或者您可以切换到通用列表:
using UnityEngine;
using System.Collections.Generic;
public class Achievements: MonoBehaviour {
public List<Achiv> achivList = new List<Achiv>();
void Start () {
achivList.Add (new Achiv("First name", "Descirptionn", false));
achivList.Add (new Achiv("Second name", "Descirptionnn", false));
printAchiv();
}
void printAchiv(){
for (int i = 0; i <= achivList.Count - 1; i++)
{
Debug.Log("Achiv "+i+": "+ achivList[i].getName());
}
}
}