我知道这个问题是什么,但我对我的程序是如何犯这个错误感到困惑。
我在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);
}
答案 0 :(得分:1)
arrays具有固定的大小长度,因为您没有初始化它们,并且因为您不知道项目的数量,您可能应该使用通用List
。 Lists
可动态调整大小,数组不是:
List<string> Names = new List<string>();
Names.Add(networkName);
答案 1 :(得分:0)
如果您两次调用Network.GetAvailableRouters()
,首先您的代码效果不佳。将其添加到var availableRouters
之类的变量中,然后分别访问availableRouters.Item1
和availableRouters.Item2
。
其次,您似乎需要构建一个长度未知的项目集合(因为您使用的是foreach
而不是for
),因此string[]
不是您想要的数组中预定数量的项目。
尝试使用通用的字符串列表(即var names = new List<string>();
)并调用它的添加函数,如names.Add(networkName)
来构建您的集合。
它本质上是一个字符串数组,具有添加的功能,允许您添加到“感知的”无界集合。