无法将索引应用于“IntPtr”类型的表达式; == IntPtr ptr1 = [...] -->指针1[0]

发布于 2024-10-31 20:45:34 字数 838 浏览 1 评论 0原文

我找到了我想要实现的代码片段。现在的问题是有一个功能没有运行。 无法将索引应用于“IntPtr”类型的表达式

        fixed (byte* numRef = this.tribuf)
        {
            for (int i = 0; i < num; i++)
            {
                item = this.trihash.GetItem(ch + S.Substring(i, 3));
                if (item != null)
                {
                    this.TrigramChecked += item.Count;
                    foreach (int num3 in item)
                    {
                        if ((num3 != id) && (numRef[num3] < 0xff))
                        {
                            IntPtr ptr1 = (IntPtr) (numRef + num3);
                            /* ToDo: Error */
                            ptr1[0] = (IntPtr) ((byte) (ptr1[0] + 1));
                        }
                    }
                }
            }
        }

Chris

I found a code snippet which I want to implement. Now is the problem that one function isn't running. Cannot apply indexing to an expression of type 'IntPtr'

        fixed (byte* numRef = this.tribuf)
        {
            for (int i = 0; i < num; i++)
            {
                item = this.trihash.GetItem(ch + S.Substring(i, 3));
                if (item != null)
                {
                    this.TrigramChecked += item.Count;
                    foreach (int num3 in item)
                    {
                        if ((num3 != id) && (numRef[num3] < 0xff))
                        {
                            IntPtr ptr1 = (IntPtr) (numRef + num3);
                            /* ToDo: Error */
                            ptr1[0] = (IntPtr) ((byte) (ptr1[0] + 1));
                        }
                    }
                }
            }
        }

regards Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2024-11-07 20:45:34

正如我在评论中所说,我首先会尝试避免不安全的代码,但它看起来实际上只是尝试这样做:

if ((num3 != id) && (numRef[num3] < 0xff))
{
    numRef[num3]++;
}

或者也许更有效(仅从 numRef 读取[num3] 一次):

if (num3 != id)
{
    byte value = numRef[num3];
    if (value < 0xff)
    {
        numRef[num3] = (byte) (value + 1);
    }
}

As I said in a comment, I would try to avoid unsafe code in the first place, but it looks like it's really just trying to do:

if ((num3 != id) && (numRef[num3] < 0xff))
{
    numRef[num3]++;
}

Or perhaps more efficiently (to only read from numRef[num3] once):

if (num3 != id)
{
    byte value = numRef[num3];
    if (value < 0xff)
    {
        numRef[num3] = (byte) (value + 1);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文