Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误消息:索引超出了数组的边界_C#_Arrays_String - Fatal编程技术网

C# 错误消息:索引超出了数组的边界

C# 错误消息:索引超出了数组的边界,c#,arrays,string,C#,Arrays,String,我知道这个问题说明了什么,但我对我的程序是如何产生这个错误感到困惑 我在dll文件中有两个字符串数组: string[] Names = { }; string[] SignalQuality = { }; 我在类中再次设置字符串[]的代码: Names[i] = networkName; SignalQuality[i] = network.wlanSignalQuality + "%"; 当我使用Tuple从程序中调用它们时: string[] Names = Network.GetAv

我知道这个问题说明了什么,但我对我的程序是如何产生这个错误感到困惑

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

string[] Names = { };
string[] SignalQuality = { };
我在类中再次设置字符串[]的代码:

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);
}
由于您没有初始化它们,并且由于您不知道项目的数量,所以您可能应该使用泛型。列表可动态调整大小,数组不可:

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

首先,如果调用Network.GetAvailableRouters两次,代码的性能会很差。将其放入一个变量,如var availableRouters,然后分别访问availableRouters.Item1和availableRouters.Item2

其次,您似乎需要构建一个长度未知的项集合,因为您使用的是foreach而不是for,所以字符串[]不是您想要的,它需要数组中预定数量的项

尝试使用字符串的通用列表,即变量名称=新列表;并像so names.AddnetworkName那样调用它的add函数来构建集合。
它本质上是一个字符串数组,添加了一些功能,允许您添加到一个可感知的无界集合。

如何使用断点以及断点的用途-