C # List <String>Печать элементов - PullRequest
0 голосов
/ 28 мая 2019

очень новый для c # здесь и следующие учебные пособия по PluralSight.

У меня есть следующие файлы (классы, я думаю?)

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Customers
{
    class Program
    {
        static void Main(string[] args)
        {
            CustomerList customers = new CustomerList();

            customers.AddCustomer("Apple");
            customers.AddCustomer("Microsoft");
        }
    }
}

И CustomerList.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Customers
{
    public class CustomerList
    {
        public CustomerList()
        {
            customers = new List<string>();
        }

        public void AddCustomer(string customer)
        {
            customers.Add(customer);
        }

        private List<String> customers;
    }
}

Загвоздка, в которую я попадаю, заключается в том, что я просто хочу перечислить элементы в списке, и это меня озадачивает. Я попытался использовать оператор foreach следующим образом.

      foreach (string customer in customers)
        {
            Console.WriteLine(customer);
        }

из Program.cs, но я не могу сделать это, как говорится

" оператор foreach не может работать с переменными типа« CustomerList », поскольку« CustomerList »не содержит общедоступного определения экземпляра для« GetEnumerator »»

Однако, если я храню весь свой код в Program.cs и использую следующее, я могу выписать каждый элемент в списке.

private List<string> customers;

static void Main(string[] args)
{
    customers = new List<String>();
    AddCustomers(customers);

    foreach(string customer in customers) {

         Console.WriteLine(customer);
    }


}

private void AddCustomers(List<string> customers)
    {
        customers.Add("Apple");
        customers.Add("Microsoft");
    }

Как я уже сказал, очень новый, так что, пожалуйста, не торопись мне.

Ответы [ 2 ]

3 голосов
/ 28 мая 2019

Попробуйте реализовать интерфейс IEnumerable в своем классе CustomerList.Делая это, вы должны добавить метод GetEnumerator(), и это позволит вам перебирать ваш список строк.Реализуйте интерфейс, как показано ниже (обратите внимание на : IEnumerable в определении класса):

public class CustomerList : IEnumerable 
{
    ... // Your current code \\ ...

    public IEnumerator GetEnumerator()
    {
        return customers.GetEnumerator();
    }
}
2 голосов
/ 28 мая 2019

Вам нужно начать с изучения определения CustomList и экземпляра клиентов .Клиенты экземпляра не являются коллекцией и, следовательно, не могут быть перечислены, как говорится в описании ошибки.Но скорее это экземпляр CustomerList, у которого есть свойство под названием customer.

Свойство customer представляет собой набор строк и может быть перечислено, однако в вашем случае вы имеетеобъявил его как частное.

Итак, первое, что вам нужно сделать, это сделать его публичной собственностью.Обратите внимание, что я не сделал переменную общедоступной, а сделал ее публичной собственностью.Вы можете узнать больше о свойствах здесь

public List<String> customers {get;set;}

И затем, в вашем foreach вы можете сделать следующее:

foreach (string customer in customers.customers)
{
    Console.WriteLine(customer);
}

Это, однако, изменения, которые могутбыть необходимым, чтобы ваш существующий код работал.Но, если вам нужно переписать весь код, у вас есть несколько вариантов.

a) Можно покончить с классом CustomerList и напрямую использовать List.

var customers = new List<string>();
customers.Add("Apple");

b) Использовать CustomerListкласс, но используйте открытое свойство Customers, чтобы напрямую добавить в список

public class CustomerList
{
    public CustomerList()
    {
        customers = new List<string>();
    }

    public List<String> Customers;
}

Код клиента

CustomerList customers = new CustomerList();

customers.Customers.Add("Apple");
customers.Customers.Add("Microsoft");

c) Третий вариант - реализовать интерфейс IEnumerable, но, тем не менее, учитывая требованиявашего кода и тот факт, что вы все еще изучаете C #, я бы сказал, что это может быть излишним.Было бы лучше сначала получить четкое представление о коллекциях и классах / свойствах, прежде чем приступить к реализации IEnumerable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...