如何检查值类型的值是否为 IntPtr.Zero

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

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

现在我的方法:

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

也许您必须对照工作项目而不是对照 属性 值 'width'。

由于您正在使用自定义渲染器,我假设您正在使用 Xamarin.Forms。 您无法在此处检查 IntPtr.ZeroIntPtr 由 Xamarin.Forms 内部设置。您通常无法访问错误的指针。所以你看不到它在那里,但是当你访问 Width 属性 时你会收到一个错误,因为它在内部与那个指针一起工作。

此错误可能有两种原因:

  1. 您没有正确初始化控件。所以它包含空指针。
  2. Xamarin.Forms 中存在错误。针对 Xamarin.Forms 的其他版本测试您的代码。如果该错误未在其他版本中出现,或者您认为这是一个错误,则将其提交 here.