1

我创建了一个应用程序来检查有多少用户登录到一台机器并执行计数。我已经使用 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

4 回答 4

2

尝试使用以下打印出您的列表

list.ForEach(Console.WriteLine);

这将打印所有列表元素。每行一个。

于 2016-02-11T15:08:29.697 回答
1

我在这里看到几个问题。

第一个:将列表创建和打印放在循环之外,否则您正在为每个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);
于 2016-02-11T15:09:21.057 回答
0

此行将 list.ToString() 的值打印到控制台:

Console.WriteLine(list);

您的帐户在那里,但 ToString 的默认行为将打印有关对象类型的信息。尝试将该行替换为:

Console.WriteLine(account.ToString());
于 2016-02-11T15:09:57.673 回答
0

您可以使用此代码块:

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

Console.WriteLine(list)是一样的Console.WriteLine(list.ToString())ToString()方法返回 List 对象的系统名称。

于 2016-02-11T15:40:47.760 回答