C# 数组索引

本文关键字:索引 数组 | 更新日期: 2023-09-27 18:33:57

如果这是一个明显的问题,请提前道歉。

刚刚从java切换到C#,我正在用C#练习,以便熟悉它。这只是一个二进制搜索程序。

  1. 此行中存在错误key > array[mid]不能将带有 [] 的索引应用于 System.array 类型的表达式。
  2. 我试图谷歌它,有人说它应该是key > array.GetValue(mid),但更改后错误变为"运算符<不能应用于 int=" 和对象类型的操作数="。</li">

我真的不知道该怎么做,也没有人可以讨论它,所以任何关于从java切换到C#的帮助或任何建议都会很棒。谢谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BinarySearch.BinarySearch
{
    class BinarySearch
    {
        public int BinarySearch(int key, Array array)
        {
            int lowerbound = 0, upperbound = array.Length, mid = 0, count = 0, midValue = 0;
            while (lowerbound <= upperbound)
            {
                mid = (lowerbound + upperbound)>>1;
                if (key < array[mid])
                {
                    upperbound = mid - 1;
                    count++;
                }
                else if (key > array[mid])
                {
                    lowerbound = mid + 1;
                    count++;
                }
                else
                {
                    count++;
                    return mid;
                }
            }
            return -1;   //the key does not exist in this array.
        }
    }
}

C# 数组索引

如果确实要在代码中使用类型 Array,可以使用 GetValue() 方法,但需要将返回的 object 实例强制转换回 int 进行比较。 例如:

if (key < (int)array.GetValue(mid))

但这可能不是你真正想要的。您应该像在 Java 中使用数组一样使用数组。例如:

public int BinarySearch(int key, int[] array)

然后你可以像在 Java 中一样编写表达式:

if (key < array[mid])

最后,其他几件事:

  1. 您的代码返回一个Array,这没有任何意义。我将上面示例中的返回类型更改为int
  2. .NET 已经有一个非常好的二叉搜索实现。人们希望这只是为了你自己的启发,而不是在某个地方的生产代码中使用的东西。:)