代码之家  ›  专栏  ›  技术社区  ›  Ginxxx

变量previousValue正在返回NullReferenceException:对象未设置为对象的实例

  •  1
  • Ginxxx  · 技术社区  · 8 年前

    此代码有错误

    对象引用未设置为对象的实例

    IEnumerator WinLog_big_road(){
    
    string[] historyValue = new string[] { };
    
    NetworkManager.Instance.WebSocketServer.OnCallBack_SC_WEBSOCKET_GametableHistory += CallBack_CS_WEBSOCKET_GametableHistory;
    
    historyValue = PlayInfo.Instance.HistoryValue;
    
        foreach (var previousValue in historyValue)
        {
             if (previousValue.Contains(playerwinnopairboth))
             {
                  o.GetComponent<UISprite>().spriteName = "layout_player_bigline-01";
                  NGUITools.SetActive(o, true);
              }
        }
    }
    
    private void CallBack_CS_WEBSOCKET_GametableHistory(bool success, Int32 gametable_no, Int32 year, Int32 month, Int32 day, Int32 shoe_no, gametable_history_list list)
    {
        string[] newString = new string[4];
        string[] newChars = new string[4];
    
        if (gametable_no == 1)
        {
            for (int i = 0; i < PlayInfo.Instance.gametable_history_list.Count; i++)
            {
                newString[0] += PlayInfo.Instance.gametable_history_list[i].r;
                newString[0] += ",";
            }
            newChars[0] = newString[0].Split(',').ToString();
        }
       //upto gametable 4
       PlayInfo.Instance.History = newChars;
    }
    

    在我的 PlayInfo.Instance.History 这是它的样子

    private string[] historyvalue;
    public string[] HistoryValue
    {
        get { return historyvalue; }
        set { historyvalue = value; }
    
    }
    

    我尝试使用扩展方法检查数组是否为null

     public static bool IsNullOrEmpty(Array array)
    {
        return (array == null || array.Length == 0);
    }
    

    所以我试着 播放信息。例子历史 如果是的话 null 但它不是空的。然后还尝试了我的 historyValue 但事实并非如此 无效的

    现在它指向我这里 foreach(var previousValue in HistoryValue) 那是我的 previousValue 为空。

    我通过调试证明了这一点 if(previousValue == null) 是的,它是空的。

    有人能解释一下为什么它是空的吗。我没有得到 PlayInfo.Instance.HistoryValue 然后将其传递给 历史价值

    2 回复  |  直到 8 年前
        1
  •  1
  •   Ethan    8 年前

    我在您提供的代码中没有看到“tzPlayInfo”。但如果播放信息,则previousValue可能为null。例子在设置historyValue之前,历史记录中有任何空值。从提供的代码中,我看不到PlayInfo在哪里。例子将填充历史记录。

    我想知道这条线的作用是否有些混淆。

    NetworkManager.Instance.WebSocketServer.OnCallBack_SC_WEBSOCKET_GametableHistory += CallBack_CS_WEBSOCKET_GametableHistory;
    

    这是将CallBack\u CS\u WEBSOCKET\u GametableHistory添加为事件处理程序,但不调用该函数来执行。

        2
  •  1
  •   Ginxxx    8 年前

    而不是在 IEnumerator 功能我只是在 CallBack_CS_WEBSOCKET_GametableHistory 作用

    IEnumerator WinLog_big_road(){
    NetworkManager.Instance.WebSocketServer.OnCallBack_SC_WEBSOCKET_GametableHistory += CallBack_CS_WEBSOCKET_GametableHistory;
    }
    

    然后在我的 CallBack\u CS\u WEBSOCKET\u GametableHistory 作用

    private void CallBack_CS_WEBSOCKET_GametableHistory(bool success, Int32 gametable_no, Int32 year, Int32 month, Int32 day, Int32 shoe_no, gametable_history_list list)
    {
    string[] newString = new string[4];
    
       if (gametable_no == 1)
       {
           for (int i = 0; i < PlayInfo.Instance.gametable_history_list.Count; i++)
           {
               newString[0] += PlayInfo.Instance.gametable_history_list[i].r;
               newString[0] += ",";
           }
           string[] newChars = newString[0].Split(',').ToString();
           DeleteChildrens(pos_big_road[0]);
           foreach (string previousValue in newChars)
           {
                GameObject o = Instantiate(prefab_big_road[0]) as GameObject;
                o.transform.SetParent(pos_big_road[0]);
                o.transform.localScale = Vector3.one;
                o.transform.localPosition = new Vector3(2.0f, -5.0f, 0f);
           }
        }
    }
    

    谢谢各位。