【问题标题】:How do I check if a value type has a value of IntPtr.Zero如何检查值类型的值是否为 IntPtr.Zero
【发布时间】:2015-10-21 11:41:35
【问题描述】:

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

现在我的方法:

horizontalScrollView.ScrollTo(this.Width, 0);

不断抛出异常:

System.ArgumentException:“jobject”不得为 IntPtr.Zero。 10-21 12:10:41.898 E/AndroidRuntime(15053):参数名称:jobject 10-21 12:10:41.898 E/AndroidRuntime(15053): 在 Android.Runtime.JNIEnv.CallIntMethod (intptr,intptr) [0x00010] 在 /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): 在Android.Views.View.get_Width()

因此,查看异常并从我的断点中,我发现问题在于,当我将鼠标悬停在 this.Width 上时,我得到 'jobject' must not be IntPtr.Zero 而不是 integer,所以我尝试针对此进行防御性编码并执行以下操作:

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

但这不会编译并给我错误:

运算符“!=”不能应用于“int”类型的操作数和 'IntPtr'

所以我的问题是。有没有办法检查value type 是否等于IntPtr.Zero

【问题讨论】:

    标签: c# android xamarin mono xamarin.forms


    【解决方案1】:

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

    这个错误有两种可能的原因:

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

    【讨论】:

      【解决方案2】:

      也许您必须检查作业对象而不是属性值“宽度”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2023-02-16
        • 2016-09-26
        • 1970-01-01
        相关资源
        最近更新 更多