C# 错误消息:索引超出了数组的边界
我知道这个问题说明了什么,但我对我的程序是如何产生这个错误感到困惑 我在dll文件中有两个字符串数组:C# 错误消息:索引超出了数组的边界,c#,arrays,string,C#,Arrays,String,我知道这个问题说明了什么,但我对我的程序是如何产生这个错误感到困惑 我在dll文件中有两个字符串数组: string[] Names = { }; string[] SignalQuality = { }; 我在类中再次设置字符串[]的代码: Names[i] = networkName; SignalQuality[i] = network.wlanSignalQuality + "%"; 当我使用Tuple从程序中调用它们时: string[] Names = Network.GetAv
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函数来构建集合。
它本质上是一个字符串数组,添加了一些功能,允许您添加到一个可感知的无界集合。如何使用断点以及断点的用途-