访问列表中的字符串数组中的元素<>

时间:2015-02-27 07:23:16

标签: c# arrays collections

我有几个字符串数组,都采用这种方案:

string[0] = article number; string[1] = description; string[2] = amount;

现在,List包含约50个这些数组。 现在我想知道,如何在数组中访问这些值。

例如: 我在文本框中输入了文章编号。 现在应搜索数组,其中包含“0”索引中的文章编号。 我如何实现这一目标? 我试过像:

for(int i = 0; i<List.length;i++)
{
   if(List[i[0]] == txtBox.Text;
   {
       doSomething();
       break;
   }
}

但当然这还不好。

2 个答案:

答案 0 :(得分:1)

我建议你定义一个这样的类

public class Article
{
    public string ArticleNumber { get; set;}
    public string Description { get; set; }
    public string Amount { get; set; } 
}

其目的是保存有关文章的所有信息,现在存储在数组中,这不是最佳方式。

然后你应该创建一个arcticles列表:

var articles = new List<Article>();

您将在其中添加文章。

这样做,你想要的是:

// This would check if there is any article in your list, whose article         
// number starts with the letters in the txtBox.Text
if(articles.Any(article=>article.ArticleNumber.Contains(txtBox.Text))
    DoSomething();

// If you want to search if there is any article, whose article number
// matches the inserted number in the textbox, then you have to change the 
// above
if(articles.Any(article=>article.ArticleNumber == txtBox.Text))
    DoSomething();

如果您打算使用可能存在的文章,那么我们应该将上述内容更改为以下内容:

var article = articles.FirstOrDefault(article=>
                  article.ArticleNumber.Contains(txtBox.Text));

var article = articles.FirstOrDefault(article=>
                  article.ArticleNumber == txtBox.Text);

if(article!=null)
    DoSomething();

此版本与第一个版本之间的区别在于,您知道如果找到它可以使用article,而无需再次查询序列。

答案 1 :(得分:1)

现有代码存在一些问题:

  1. 要访问另一个索引中的索引,[]需要相互之间而不是内部。即[0] [0]而不是[0 [0]]
  2. 因为if语句没有任何{},所以循环在第一次迭代后会中断。
  3. 尝试将其更改为此类

    for(int i = 0; i<List.length;i++)
    {
       if(List[i][0] == txtBox.Text)
       {    
          doSomething();
          break;
       }
    }
    

    正如其他评论指出的那样,最好使用类和linq这样的东西

    public class MyClass 
    {
       public string ArticleNumber {get; set;}
       public string Description {get; set;}
    }
    

    使用linq搜索

    var list = new List<MyClass>()
    if (list.Any(i => i.ArticleNumber.Equals(txtBox.Text)))
    {
        DoSomething();
    }