C# 无法用列填充ListView

C# 无法用列填充ListView,c#,C#,我创建了一个包含3列的ListView(Details),我想填充它们,但在Active Directory中运行应用程序时出现此错误:“索引超出范围。必须为非负且小于集合的大小”。参数名称:索引 更新:此代码现在可以正常工作(但我需要转换为datetime格式) directorySearcher.PropertiesToLoad.Add("name"); directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");

我创建了一个包含3列的ListView(Details),我想填充它们,但在Active Directory中运行应用程序时出现此错误:“索引超出范围。必须为非负且小于集合的大小”。参数名称:索引

更新:此代码现在可以正常工作(但我需要转换为datetime格式)

directorySearcher.PropertiesToLoad.Add("name");
directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");
directorySearcher.PropertiesToLoad.Add("pwdlastset");

SearchResultCollection results = directorySearcher.FindAll();

foreach (SearchResult result in results)
{
    string name = result.Properties["name"][0].ToString();
    string office = result.Properties["physicalDeliveryOfficeName"][0].ToString();
    string pwdlastset = result.Properties["pwdlastset"][0].ToString();

    ListViewItem item = new ListViewItem(new string[] { name, office, pwdlastset});
    SearchResult.Items.Add(item);
}

您能告诉我如何解决这个问题吗?

我想这是因为pwdLastSet需要大写字母
L
S
。请尝试此linq解决方案以避免出现空异常:

directorySearcher.PropertiesToLoad.Add("name");
directorySearcher.PropertiesToLoad.Add("physicalDeliveryOfficeName");
directorySearcher.PropertiesToLoad.Add("pwdLastSet");

SearchResult.Items.AddRange(
    directorySearcher.FindAll().Where(x => x.Properties != null).Select(x => new ListViewItem(new string[] {
        x.Properties["name"] != null && x.Properties["name"].Any() 
            ? x.Properties["name"][0] 
            : String.Empty,
        x.Properties["physicalDeliveryOfficeName"] != null && x.Properties["physicalDeliveryOfficeName"].Any() 
             ? x.Properties["physicalDeliveryOfficeName"][0] 
             : String.Empty,
        x.Properties["pwdLastSet"] != null && x.Properties["pwdLastSet"].Any() 
             ? x.Properties["pwdLastSet"][0] 
             : String.Empty
    }))
);

您是否尝试调试代码并查看是否有任何值为null或没有数据,因为有时这可能是您得到索引错误的原因。LDAP查询返回3个用户,他们都有name、office和pwdlastset not null。它到底在哪里崩溃?当您尝试获得name、office或value时?对于测试,我只设置了1列对于ListView。当使用属性“name”时,它只起作用。当使用“office”时,它失败了,但我发现我更应该使用“physicalDeliveryOfficeName”,它起作用。当使用PwdLastSet(这是正确的LDAP属性名)时,它在这里失败。因此,问题在于PwdLastSet。这是给我错误信息的属性(3个用户得到类似131111023173214141的结果):正确。非常感谢