Member 13356276 Ответов: 3

C# - список, созданный в части кода, не может быть доступен из остальной части


Итак, я кодирую на C# и только начинаю, и моя первая оценка состоит в том, чтобы взять данные из CSV-файла и загрузить их в список (должен использовать список), а затем загрузить их в dataGridView в моем приложении Windows Forms, а затем сделать их редактируемыми. Теперь у меня есть приличная идея, как это сделать, как только я получу его в dataGridView, но я серьезно запутался в том, что этот список не будет доступен, как только я создам и верну его. Делаю ли я что-то серьезно неправильное, возвращаясь или пропуская шаг??

Если я установлю точку останова прямо при возврате списка, он будет работать нормально, и мои 40 строк данных из CSV-файла будут упорядочены по элементам списка и правильно отсортированы, но как только я выйду из этого фрагмента кода, он просто не появится.

Наконец, мой план, как только я получу данные в этот dataTable, состоит в том, чтобы установить источник на моем dataGridView в dataTable, как сказано в куче сообщений на онлайн-форуме works find, и, очевидно, я еще не написал его, чтобы добавить все различные элементы, но сначала мне нужно выяснить, почему список не отображается в intellisense или вообще не работает. Заранее спасибо.

public static IList<DailyValues> ReadValues(string path)
        {
            var myList = new List<DailyValues>();
            foreach (var line in File.ReadLines(path).Skip(1))
            {
                myList.Add(DailyValues.FromLine(line));
            }
            return myList;
        }

        public static DataTable dt()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ItemCode");
            dt.Columns.Add("ItemDescription");
            dt.Columns.Add("CurrentCount");
            dt.Columns.Add("OnOrder");
            foreach (var ItemCode in myList)
            {
                dt.Rows.Add(new object[] { ItemCode.ItemCode });
            }
            return dt;
        }


Что я уже пробовал:

это всего лишь текущая итерация, я перепробовал кучу вещей, которые совершенно не сработали.

3 Ответов

Рейтинг:
22

Graeme_Grant

Глядя на ваш образец кода, myList переменная не входит в сферу действия вашего dt() метод. Вам нужно передать результат от ReadValues(...) метод и передайте его своему dt() метод ... что-то вроде

public static DataTable dt(IList myList)
{
 // code goes here
}

Затем позвонить:
var table = dt(ConvertCSVtoDataTable(inFilePath));


BillWoodruff

+5 это твердое, подходящее решение.

Graeme_Grant

Это было для него недостающим звеном... ;)

Member 13356276

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

Рейтинг:
2

Graeme_Grant

Вот рабочий фрагмент кода, который показывает, как получить CSV-файл в DataTable. Вам не нужно будет много менять, чтобы сделать то, что вы хотите для своей "первой оценки".

public static DataTable ConvertCSVtoDataTable(string strFilePath)
{
    DataTable dt = new DataTable();
    using (StreamReader sr = new StreamReader(strFilePath))
    {
        string[] headers = sr.ReadLine().Split(',');
        foreach (string header in headers)
        {
            dt.Columns.Add(header);
        }
        while (!sr.EndOfStream)
        {
            string[] rows = sr.ReadLine().Split(',');
            DataRow dr = dt.NewRow();
            for (int i = 0; i < headers.Length; i++)
            {
                dr[i] = rows[i];
            }
            dt.Rows.Add(dr);
        }
    }
    return dt;
}


BillWoodruff

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

Graeme_Grant

а #1-это немного суровый законопроект, учитывая, что это рабочий код... Это не точный ответ, он все еще нуждался в большом рефакторинге, чтобы получить то, что ему было нужно.

Он был уже близко... Это просто пример того, что работает. Поиск в Google дал бы ему что-то почти идентичное...

Рейтинг:
2

Patrice T

Цитата:
C# - список, созданный в части кода, не может быть доступен из остальной части

Вам нужно изучить "области переменных". В зависимости от того, что вы хотите сделать, место, где вы объявляете переменную, имеет значение.
3.7 Области Применения (C#)[^]

"Более формальное определение заключается в том, что область действия-это охватывающий контекст или область, которая определяет, где имя может использоваться без каких-либо оговорок."
Понимание классов и объектов способом C# / объектно-ориентированное программирование | InformIT[^]

Visual C# 2010-Переменная Область Видимости-YouTube[^]