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.