В моем проекте 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.
Есть ли идеи, почему это может произойти?
Заранее спасибо!