错误消息:索引超出了数组的范围

时间:2018-02-10 07:59:15

标签: c# arrays string

我知道这个问题是什么,但我对我的程序是如何犯这个错误感到困惑。

我在dll文件中有两个字符串数组:

string[] Names = { };
string[] SignalQuality = { };

我在类中再次设置strings[]的代码:

Names[i] = networkName;
SignalQuality[i] = network.wlanSignalQuality + "%";

当我使用Tuple从我的程序中调用它们时:

string[] Names = Network.GetAvailableRouters().Item1;
string[] Signals = Network.GetAvailableRouters().Item2;
Console.WriteLine(Names[0] + " " + Signals[0]);

在课堂内向我抛出异常消息:

  

System.IndexOutOfRangeException:'索引超出了界限   。阵列'

完整代码:

public static Tuple<string[], string[]> GetAvailableRouters()
{
    //Declare here as I said
    string[] Names = { }; 
    string[] SignalQuality = { };
    WlanClient client = new WlanClient();

    foreach (WlanClient.WlanInterface wlaninterface in client.Interfaces)
    {
        Wlan.WlanAvailableNetwork[] networks = wlaninterface.GetAvailableNetworkList(0);
        foreach (Wlan.WlanAvailableNetwork network in networks)
        {
            int i = 0;
            Wlan.Dot11Ssid ssid = network.dot11Ssid;
            string networkName = Encoding.ASCII.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);
            Names[i] = networkName;
            SignalQuality[i] = network.wlanSignalQuality + "%";
            i++;

        }
    }
    //return with Tuple.Create()
    return Tuple.Create(Names, SignalQuality);
}

2 个答案:

答案 0 :(得分:1)

arrays具有固定的大小长度,因为您没有初始化它们,并且因为您不知道项目的数量,您可能应该使用通用ListLists可动态调整大小,数组不是:

List<string> Names = new List<string>();
Names.Add(networkName);

答案 1 :(得分:0)

如果您两次调用Network.GetAvailableRouters(),首先您的代码效果不佳。将其添加到var availableRouters之类的变量中,然后分别访问availableRouters.Item1availableRouters.Item2

其次,您似乎需要构建一个长度未知的项目集合(因为您使用的是foreach而不是for),因此string[]不是您想要的数组中预定数量的项目。

尝试使用通用的字符串列表(即var names = new List<string>();)并调用它的添加函数,如names.Add(networkName)来构建您的集合。 它本质上是一个字符串数组,具有添加的功能,允许您添加到“感知的”无界集合。