Как суммировать две строки и добавить в класс списка?

#c#

#c#

Вопрос:

     class Asient
    {
        private List<String> letras = new List<String> {
          "A","B","C","D","E","F","G","H","J"};

        private List<string> fila = new List<string> {
          "1","2","3","4","5","6","7","8"};

        private List<string> asientos= new List<string>();

        public Asient(){
            for (int i = 0; i < letras.Count; i  ){
                for (int n = 0; n < letras.Count; n  ){
                    string sillaletra = letras[i]   fila[n];
                    asientos.Add(sillaletra);
                }
            }
        }

        public List<string> GetAsientos(){
            return this.asientos;
        }
    }

    class Mainn
    {   
        static void Main(string[] args)
        {
            Asient sillas = new Asient();
            sillas.GetAsientos();
        }
    }
  

И код выдает мне эту ошибку во время выполнения:

 Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. 
Must be non-negative and less than the size of the collection. (Parameter 'index')
  at System.Collections.Generic.List`1.get_Item(Int32 index)
  at A05CINE.Asient..ctor() in D:Usersxxxxxc#xxx.cs:line 15
  at A05CINE.Mainn.Main(String[] args) in D:UsersxDesktopxxxc#A05xx.cs:line 31
  

Кто-нибудь знает, как это исправить?

Я попытался использовать

 asientos.Add(letras[i]   fila[n]);
string sillaletra = letras[i]   fila[n]; 
asientos.Add(sillaletra);
  

Комментарии:

1. Спасибо, Шон. Для меня уже слишком поздно, но вы спасли других от участи разделить мою судьбу.

2. У вас больше букв (9), чем цифр (8). Также, пожалуйста, переведите и укажите отступы на свои вопросы, чтобы людям было легче помочь вам. Отладка перед публикацией.

3. «Кто-нибудь знает, кто это исправит?» Да, не пытайтесь обращаться к индексам, которые больше длины массива.

Ответ №1:

Кажется, вы ищете декартово соединение, т. Е. Вы хотите List<string> быть

   { "A1", "A2", ..., "A8", "B1", ..., "B8", ..., "J8" } 
  

Если это ваш случай, вы можете задать для этого простой запрос Linq:

   using System.Linq;

  ... 

  public Asient() {
    asientos = letras
      .SelectMany(letter => fila.Select(digit => letter   digit))
      .ToList();
  }
  

Ответ №2:

У вас больше букв, чем цифр, добавьте

 private List<string> fila= new List<string>{"1","2","3","4","5","6","7","8","9"};
  

и это будет работать.

Комментарии:

1. Спасибо, я ценю вашу помощь <3, я решаю ее, выполняя правильное for . если вы видите for(), который я делаю для for() в for(), для того же списка я, что и его способ, не работает. извините за мой плохой английский. @Hasse

Ответ №3:

Вы перебираете ту же длину. В вашем цикле оба конца находятся в позиции letras.Count , но список имеет разную длину.

Ваш цикл должен повторяться по длине каждого массива следующим образом:

 for (int i = 0; i < letras.Count; i  )
{
    for (int n = 0; n < fila.Count; n  )
    {
        //...
    }
}
  

Обратите внимание, что первый массив имеет значение от 0 до letras.Count .

И второй идет от 0 до fila.Count .

Теперь каждая позиция повторяется.