2013-04-18 30 views
1

我最近在我的開發硬件上安裝了最新版本的OSX,Xcode和Xamarin Monotouch,我無法獲得最簡單的Monogame示例以正常運行。我如何修復Monogame和Xamarin的數字溢出?

這是跳動框例子,它崩潰應用程序啓動時,就用的彩色結構的第一初始化= 255:

public byte A 
{ 
    ... 

    set 
    { 
     this._packedValue = (this._packedValue & 0x00ffffff) | ((uint)(value << 24)); 
    } 
} 

此代碼工作正常的Windows,甚至是iPhone模擬器,但是當我在iPad 1(iOS 5)或iPhone 5(iOS6)上運行它時,我得到的異常是「System.OverflowException:Number overflow。」。如果我更改代碼以不導致溢出:

set 
{ 
    var val = (uint)value; 

    var val2 = val << 24; 

    this._packedValue = (this._packedValue & 0x00ffffff) | val2; 
} 

這個問題消失,但同樣的問題是由R,G,和B表現出性能爲好。我的直覺是,Monogame不是寫在數字溢出的頭腦中,而且可能有無數的例子。自從編寫示例代碼後,這必定是一個'新'問題。

是否有一些編譯器開關丟失,迫使它忽略數字溢出?我正在使用Visual Studio 2012在網絡上部署,在項目屬性下我沒有看到與此相關的任何設置。

+0

我試圖重現這一點,但我沒有任何成功。你可以用http://bugzilla.xamarin.com提交一個完整的測試項目的bug,因爲這不應該發生? –

回答

0

如果我理解問題和msdn文檔,則可以在unchecked塊內完成整個操作。

set 
{ 
    unchecked 
    { 
     this._packedValue = (this._packedValue & 0x00ffffff) | ((uint)(value << 24)); 
    } 
} 

然而,這可能會導致意想不到的後果(負數,但由於您使用的簽名,我不知道,如果你從0開始,或者它仍然拋出異常),我從來沒有親自使用它。

參考可以在這裏找到:http://msdn.microsoft.com/en-us/library/a569z7k8(v=vs.110).aspx