Список C # <object>для ошибки приведения к IList в Unity3d - PullRequest
0 голосов
/ 29 марта 2012

В моем проекте Unity3d для iPhone я получил следующую проблему:
Свойство Count возвращает недопустимое значение после приведения объекта типа List<object> к IList и вызова метода ToString().

Пожалуйста, проверьте этот простой сценарий Unity C #:

public class ListCountTest : MonoBehaviour {
  void Start () {
    try {
      SimpleCountTest();
      SimpleCountTest();
    }
    catch (Exception e) {
      ConsolePrintln(e.ToString());
    }
  }

  private void SimpleCountTest() {
    ConsolePrintln("---\nSimpleCountTest");
    IList firstList = new List<object>();

    firstList.Add(1);
    firstList.Add(2);

    ConsolePrintln("firstList.Count = " + firstList.Count);
    ConsolePrintln("firstList.ToString() = " + firstList.ToString());
    ConsolePrintln("firstList.Count = " + firstList.Count);

    IList secondList = new List<object>();

    secondList.Add(1);
    secondList.Add(2);

    ConsolePrintln("secondList.Count = " + secondList.Count);
    ConsolePrintln("secondList.ToString() = " + secondList.ToString());
    ConsolePrintln("secondList.Count = " + secondList.Count);
  }

  public void ConsolePrintln(string text) {
    UnityEngine.Debug.Log(text);
  }
}

Вот вывод:

---
SimpleCountTest
firstList.Count = 2
firstList.ToString() = System.Collections.Generic.List`1[System.Object]
firstList.Count = 2
secondList.Count = 0
secondList.ToString() = System.Collections.Generic.List`1[System.Object]
secondList.Count = 0

---
SimpleCountTest
firstList.Count = 0
firstList.ToString() = System.Collections.Generic.List`1[System.Object]
firstList.Count = 0
secondList.Count = 0
secondList.ToString() = System.Collections.Generic.List`1[System.Object]
secondList.Count = 0

Во время моего расследования я обнаружил, что если я удаляю вызовы firstList.ToString() и secondList.ToString(), то все становится хорошо.

Иногда во время исследования этой проблемы я достигал другого, описанного здесь: Неверное поведение кода C # при использовании IList в Unity3d на iOS , поэтому я думаю, что они могут быть связаны.

Я предполагаю, что эта проблема может быть связана с режимом полного компилятора, потому что на Android этот код работает хорошо.

Обратите внимание, эту проблему легко воспроизвести. Я воспроизводил его почти все время на iPod 4 (iOS 5.1), iPhone 4s (iOS 5.0.1), iPod 4 (iOS 4.1). Но вам все равно может понадобиться запустить его несколько раз для воспроизведения.
Я использую Unity 3.5.0b6, тип лицензии: Unity, iPhone, Android. Xcode 4.2.1.

Есть ли идеи, почему это может произойти?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...