检查从Active Directory加载的值是否为null

时间:2019-06-20 17:10:04

标签: c#

我目前正在一个项目中,该项目是从活动目录加载数据的。然后将数据放入几个字段中,并生成一个文件。但是,并非始终会填写活动目录中的所有字段,有时它们可​​能为空。但是,我仍然需要它向正在生成的数据列表中添加一些内容,以便可以告诉表单要删除的字段。

我正在下面进行操作,但是没有将N/A添加到我的列表中。我尝试四处搜寻,但发现的一个答案不适用于这种情况。

public List<String> SearchAD(String key)
        {
            List<String> data = new List<string>();

            DirectoryEntry dEntry = createDirectoryEntry();
            DirectorySearcher search = new DirectorySearcher(dEntry);
            search.Filter = "(mailnickname=" + key + ")";

            string[] requiredProperties = new string[] { "****"};
            foreach (String property in requiredProperties)
                search.PropertiesToLoad.Add(property);

            SearchResult results = search.FindOne();
            if (results != null)
            {
                foreach (String property in requiredProperties)
                {
                    foreach (Object myCollection in results.Properties[property])
                        if (myCollection.ToString() == null)
                            data.Add("N/A");
                        else
                            data.Add(myCollection.ToString());

                }
            }

            return data;
        }

1 个答案:

答案 0 :(得分:2)

由于您提到您的代码可以正常运行,所以我猜测如果results.Properties[property]不存在,property将返回一个空集合,因此这些属性将被完全跳过(我可以错了)。

如果是这种情况,那么我认为这里的问题是我们需要首先检查集合中是否包含property。如果不是,则添加"N/A",否则添加值:

foreach (String property in requiredProperties)
{
    if (results.Properties.Contains(property))
    {
        foreach (Object myCollection in results.Properties[property])
        {
            data.Add(myCollection.ToString());
        }
    }
    else
    {
        data.Add("N/A");
    }
}