C# 字符串子字符串不工作-错误开始索引不能大于长度

C# 字符串子字符串不工作-错误开始索引不能大于长度,c#,C#,错误总是说startIndex不能大于字符串的长度。 参数名称:startIndex IntializedPorts[i] = int.Parse(ports[i].ToString().Substring(105, 106)); //I tried this too IntializedPorts[i] = int.Parse(ports[i].ToString().Substring(105, 1)); //this works, this gets the first number in

错误总是说startIndex不能大于字符串的长度。 参数名称:startIndex

IntializedPorts[i] = int.Parse(ports[i].ToString().Substring(105, 106));
//I tried this too
IntializedPorts[i] = int.Parse(ports[i].ToString().Substring(105, 1));
//this works, this gets the first number in the string that would be five
IntializedPorts[i] = int.Parse(ports[i].ToString().Substring(0, 1));
//我正在尝试子字符串的字符串,我正在尝试获取字符串中ipaddress末尾的数字7

5b5bfdfe-6eb1-4b10-80af-cf4d9f1010fe3fc8ffa1-c16b-4d7b-9e55-1e88dfe15277FastTrackVirusSoftware192.168.6.17TCP/IPYESReady8/4/2013 1:07:43 PM9/1/2013 1:07:43 PM

它是TCP/IP之前的字符


根据您的屏幕截图,端口是一个字符串。因此,您对端口[i]的引用是从该字符串中获取一个字符,并在该字符串上调用.ToString。这将是一个长度为1的字符串,这将导致您发布的异常

将代码更改为:

IntializedPorts[i] = int.Parse(ports.Substring(105, 1));

它应该可以工作。

很明显,您认为它使用的字符串不是它实际使用的字符串。尝试跟踪端口[i]。ToString例如Trace.WriteReports[i]。ToString子字符串不太可能不知道字符串的正确长度。.5B5BFDFFE-6eb1-4b10-80af-cf4d9f1010fe3fc8ffa1-c16b-4d7b-9e55-1E88DFE15277快速跟踪病毒软件192.168.6.17TCP/IPYESReady8/4/2013 1:07:43 PM9/1/2013 1:07:43 PM,1工作正常,因此,该值显然不是您认为的值。@shawn:我希望您发布一个屏幕截图,显示抛出的异常,并在调试器的监视列表中键入以下表达式:ports[I]。ToString和我希望看到该表达式结果的屏幕截图。问题现在已经清楚了。您不应该索引到端口,因为端口是一个字符串,而端口[i]只是该字符串的第i个字符;当然,当转换为字符串时,没有索引105。正如彼得·里奇和我都说过的那样,波特(我)根本不可能与你声称的那根弦相等。您的解决方案很简单:您需要ports.Substring105,1作为一个开始,可以认为您应该将索引作为输入字符串的某个已知规范的函数来计算,但我们没有该规范。但是我的字符串是一个集合。在您的问题中,我没有看到任何关于它的内容,但请考虑这一行=ports[i].ToString@shawn:字符串不能是集合。它是一个字符串。有没有一种方法可以在字符串中查找特定的值,因为子字符串不存在working@shawn:字符串。子字符串正在工作,您只是用错了。有些事你没有告诉我们。
IntializedPorts[i] = int.Parse(ports.Substring(105, 1));