C# Добавление пользователей сервера в список <>

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

У меня проблема с внесением этих имен пользователей в список. Вот мой код:

static void Main(string[] args)
{        
    while (!Console.KeyAvailable)
    {
        List<string> list = new List<string>();
        string host = Dns.GetHostName();
        ITerminalServicesManager manager = new TerminalServicesManager();
        using (ITerminalServer server = manager.GetRemoteServer(host))
        {
            server.Open();
            foreach (ITerminalServicesSession session in server.GetSessions())
            {
                NTAccount account = session.UserAccount;
                if (account != null)
                {                        
                    list.Add(account.ToString());
                    Console.WriteLine(list);
                    Console.WriteLine("Count: " + list.Count);
                    Thread.Sleep(10000);
                }
            }
        }
    }
}

Когда я запускаю приложение, подсчет выполняется правильно, но список не отображается в моем приложении. System.Collection.Generic.List``1[System.String] отображается вместо списка. Есть ли способ поместить эти имена пользователей в список? Или, может быть, массив будет лучше? Какие-либо предложения? Спасибо.

4 ответа

Решение

Попробуйте распечатать свой список, используя следующие

list.ForEach(Console.WriteLine);

Это напечатает все элементы списка. Один на линию.

Я вижу пару вопросов здесь.

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

Второй: вы не можете распечатать список, используя один WirteLine так как в этом броске он пытается использовать .ToString() метод списка унаследован от объекта и дает вам результат как System.Collection.Generic.List``1[System.String],

Вместо этого вы должны использовать другой цикл, чтобы пройти список и распечатать его:

List<string> list = new List<string>();

foreach (ITerminalServicesSession session in server.GetSessions())
{
    NTAccount account = session.UserAccount;
    if (account != null)
    {
        list.Add(account.ToString());
    }
}

foreach (var item in list)
    Console.WriteLine(item);

Console.WriteLine("Count: " + list.Count);

Thread.Sleep(10000);

Эта строка выводит значение list.ToString() на консоль:

Console.WriteLine(list);

Там есть ваши учетные записи, но поведение ToString по умолчанию выводит информацию о типе объекта. Попробуйте заменить эту строку на:

Console.WriteLine(account.ToString());

Вы можете использовать этот блок кода:

foreach (var item in list)
Console.WriteLine(item);

Console.WriteLine(list) та же Console.WriteLine(list.ToString()),ToString() Метод возвращает системное имя объекта List.

Другие вопросы по тегам