为什么我的循环返回0而不是循环值?

时间:2019-07-26 20:40:00

标签: c#

我正在尝试从文本文件的数组中获取rownumber。这样我就可以替换字符串并重写文件了。经过几次尝试,该代码没有错误,但无法正常工作。当我尝试验证错误时,我将标签设置为返回值,以查看其是否返回任何内容。原来它只是显示零。我确信我的返回循环有问题。

account.txt

seow 1111 wen 12345 20 50  
user 1234 user1 12345 70 80

代码

        private string[] filelist;
        public string[] Filelist
        { get { return filelist; } }

        private static readonly int LineNo = 1000;

        public int GetRowNumber()
        {
            string username = login.accountname;
            TextReader sr = new StreamReader("account.txt");
            bool found = false;
            int i = 0;
            while(i < LineNo && !found)
            {
                filelist[i] = sr.ReadLine();
                if (filelist.Contains(username))
                    found = true;
                else i++;
            }
            if(found==true)
            {
                row= i;

                sr.Close();
            }

            return row;

        }

当点击按钮时,它应该显示行号。

 private void Button3_Click(object sender, EventArgs e)
        {
           row = GetRowNumber();
           label12.Text = row;
        }

不返回数组中的任何行值,而仅返回零值

2 个答案:

答案 0 :(得分:1)

好吧,问题出在循环之内。 这条线永远行不通

 if (filelist.Contains(username))

如果您输入的是“ Seow” ,并且数组包含“ seow 1111 wen 12345 20 50”
在字符串数组上调用的包含将检查每个条目是否与您的输入完全匹配,当然您也没有完全匹配。
但是解决方法很简单

filelist[i] = sr.ReadLine();
if (filelist[i].Contains(username))

现在我们在字符串上调用Contains,这将是部分匹配,因此将找到该行

答案 1 :(得分:0)

假设您的“ account.txt”文件每行1个项目

string content = File.GetAllText(path);
string[] lines = string[] lines = content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
int answer = -1;
string searchThis = "test2";
for (int a = 0; a < lines.Length; a++)
{   
    if (lines[a].Equals(searchThis))    
    {   
        answer = a; 
    }
}
Console.WriteLine(answer);
Console.ReadLine();

如果答案为-1,那么您将知道未找到答案。正如史蒂夫(Steve)所提到的,您永远不会更改i值,因此为什么不将其保留为原始0值。您也应该使用for,因为它意在与索引一起使用,而不是foreach。