子串导致索引和长度错误

时间:2016-02-08 20:48:19

标签: c# asp.net substring

我的代码中有一个部分,我会检查该项是西班牙语项目还是英语项目。我在旧的vb.net应用程序中使用此逻辑。

public int Spanish_Item()
{
    int i = 0;
    object j = 0;
    int k = 0;
    string ss = null;
    string sp_item = null;
    sp_item = TxtItem.Text.Trim();
    k = 0;
    for (i = 1; i <= 15; i++)
    {
        ss =  sp_item.Substring(i, 2);
        if (ss == "XX")
        {
            k = 1;
            i = 16;
        }
    }
    return k;
}

以下代码循环播放 然后我收到此错误消息:

  

ex.Message“索引和长度必须指代的位置   string。\ r \ nParameter name:length“string

请帮助!!!

2 个答案:

答案 0 :(得分:5)

你总是从1到15 - 如果TxtItem.Text的(修剪过的)文本比15个字符短,那么你就会得到例外。

您应该使用sp_item的长度为2作为上限来避免错误。 此外,您应该使用i = 16来停止for循环,而不是设置break

但是,我认为您的算法也可以像这样编写而不是for循环:

if (sp_item.IndexOf("XX")>=1) {
    k=1;
}

答案 1 :(得分:0)

在c#中,第一个位置是索引0而不是像vb

那样
public int Spanish_Item()
{
int i = 0;
object j = 0;
int k = 0;
string ss = null;
string sp_item = null;
sp_item = TxtItem.Text.Trim();
k = 0;
for (i = 0; i < sp_item.len-2; i++)
{
ss =  sp_item.Substring(i, 2);
if (ss == "XX")
{
k = 1;
i = 15;
}
}
return k;
}

你可以使用

if (sp_item.IndexOf("XX")>=0) {
    k=1;
}