在 iPhone 的Unity3d项目中,我遇到了以下问题:
将类型为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()
来电,那么一切都会正常运作。
有时在调查此问题时,我在此处描述了另一个:Invalid behavior of C# code while using IList in Unity3d on 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。
有什么想法可能会发生吗?
提前致谢!