-1
私のコードは、私が今ユニティエンジンを使用していますなぜC#ダウンキャストが常にnullになるのですか?だからここ
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,
。 このコードを実行すると、 Debug.Log( "メニュー名は" + menu.Name)です。 Debug.Log( "Statイベントはnullです。名前は" + thisSpot.Name)です。どちらも。 なぜですか? メニューはnullではありませんが、ダウンキャスト後にnullになりますか? 私はこの理由を理解していません。意気消沈ヌルになるのはなぜ
ので、このコードでは、私はコード以下の[1]の部分を実行したいのですが、[statEvent]はそう下記のすべてのコードは
(キーワードを続ける)によって呼び出されません 、ヌルされますか?
お願いします。
メニューがあるので、それがnullではない 'それは限り、あなたのコードが示すように、' SpotUIBase'あるとStatEvent'、 'SpotUIBase'拡張または他のクラスやインタフェースを実装していません。 'menu.uiSort'を' StatEvent'にキャストしようとしていますか? – Lithium
ヌルチェックが間違っています。あなたが 'menu.uiSort'にアクセスして、それがヌルかどうかを調べる前に、if(menu!= null)Debug.Log(" Menu name is "+ menu.Name);'。 – bradbury9
したがって、StatEventはSpotUIBaseから継承されます。 public class StatEvent:SpotUIBase { – leegod