为什么C#downcast变得总是空的?

时间:2017-04-27 12:38:21

标签: c# null downcast

所以这是我的代码,

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?

请帮助。

1 个答案:

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