所以这是我的代码,
public void CheckStatChal()
{
foreach (SpotUIBase menu in thisSpot.ownMenus)
{
if (menu.uiSort == SpotUISort.StatEvent)
{
if(menu != null)
Debug.Log("Menu name is "+menu.Name);
var statEvent = menu as StatEvent;
if (statEvent == null)
{
Debug.Log("Stat event is null, name is "+thisSpot.Name);
continue;
}
.......... [1]
public SpecialSpotClass thisSpot;
public abstract class SpecialSpotClass
{
public List<SpotUIBase> ownMenus = new List<SpotUIBase>();
....
public class SpotUIBase
{
public SpotUISort uiSort;
....
public class StatEvent : SpotUIBase
{
....
public enum SpotUISort{
Inn, Shop, Bar,
我现在正在使用Unity引擎。 所以,如果运行此代码,我得到了 Debug.Log(“菜单名称为”+ menu.Name);和 Debug.Log(“Stat事件为空,名称为”+ thisSpot.Name);都。 为什么? menu不是null,但是在向下转换后,它变为null? 我不明白这个原因。
所以在这段代码中,我想在代码下面执行[1]部分,但[statEvent]为null, 所以下面的所有代码都没有调用(continue keyword)
为什么downcast变为null?
请帮助。
答案 0 :(得分:0)
所以我用Google搜索并确认了正确的Downcast方法,并将foreach更改为语法。 并解决了。
这是更改的代码。
for (int i = 0; i < thisSpot.ownMenus.Count; i++)
{
if (thisSpot.ownMenus[i].uiSort == SpotUISort.StatEvent)
{
thisSpot.ownMenus[i] = SpotUI.Instance.StatEvent;
var ownMenu = (StatEvent) thisSpot.ownMenus[i];
Debug.Log("own menu is "+ownMenu.Name);
if ((!ownMenu.StatChal1.nowCoolTime && ownMenu.StatChal1 != null)
|| ownMenu.StatChal1 == null)
{
StatChallenge.Instance.MakeStatChal(this, ref ownMenu.StatChal1);
Debug.Log(ownMenu.StatChal1.Name);
ownMenu.SetChalInfo(ownMenu.StatChal1, 1);
chal1 = ownMenu.StatChal1;
}