关于c#:如何检查值类型的值是否为IntPtr.Zero

How do I check if a value type has a value of IntPtr.Zero

所以我正在编写一个Xamarin应用程序,并且已经构建了一个CustomRenderer

现在是我的方法:

1
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,所以我尝试对此进行防御性编码并执行以下操作:

1
2
3
4
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


由于您正在使用自定义渲染器,因此我假设您正在使用Xamarin.Forms。
您不能在此处检查IntPtr.ZeroIntPtr由Xamarin.Forms在内部设置。通常,您无权访问错误的指针。因此,您看不到它的存在,但是当您访问Width属性时会收到错误消息,因为它在该指针内部起作用。

有两个可能的原因导致此错误:

  • 您没有正确初始化控件。因此它包含空指针。
  • Xamarin.Forms中有一个错误。针对其他版本的Xamarin.Forms测试您的代码。如果在其他版本中未发生该错误,或??者您认为这是一个错误,请在此处归档。

  • 也许您需要检查jobject而不是属性值'width'。