2015-10-21 45 views
3

所以我寫一個Xamarin應用程序的價值,我已經建立了一個CustomRenderer如何檢查是否值類型具有IntPtr.Zero

現在我的方法:

horizontalScrollView.ScrollTo(this.Width, 0); 

不斷拋出一個異常:

System.ArgumentException: 'jobject' must not be IntPtr.Zero. 10-21 12:10:41.898 E/AndroidRuntime(15053): Parameter name: jobject 10-21 12:10:41.898 E/AndroidRuntime(15053): at Android.Runtime.JNIEnv.CallIntMethod (intptr,intptr) [0x00010] in /Users/builder/data/lanes/2185/53fce373/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:378 10-21 12:10:41.898 E/AndroidRuntime(15053): at Android.Views.View.get_Width()

所以看例外,從我的斷點我發現,問題是,當我將鼠標懸停在this.Width我得到'jobject' must not be IntPtr.Zero而不是integer,所以我嘗試防守對這個代碼,並做到:

if (this.Width != IntPtr.Zero) 
{ 
    horizontalScrollView.ScrollTo(this.Width, 0); 
} 

但這並不編譯和給我的錯誤:

Operator '!=' cannot be applied to operands of type 'int' and 'IntPtr'

所以我的問題是。有沒有辦法檢查value type是否等於IntPtr.Zero

回答

2

由於您正在使用自定義渲染器,我假設您使用的是Xamarin.Forms。 在這裏你不能檢查IntPtr.Zero。 由Xamarin.Forms內部設置。您通常無法訪問錯誤的指針。所以你看不到它在那裏,但是當你訪問Width屬性時會收到一個錯誤,因爲它在那個指針內部工作。

有此錯誤的兩個可能的原因:

  1. 你沒有正確初始化控制。所以它包含空指針。
  2. Xamarin.Forms中有一個錯誤。根據其他版本的Xamarin.Forms測試你的代碼。如果錯誤不會發生在不同的版本中,或者您認爲它是一個錯誤,那麼將其存檔here
0

也許你必須檢查工作對象,而不是針對屬性值「寬度」。