C# 当用户没有电子邮件时,在Active Directory中查询电子邮件时出现问题

C# 当用户没有电子邮件时,在Active Directory中查询电子邮件时出现问题,c#,active-directory,C#,Active Directory,我正在使用以下代码查询我们的Active Directory: using (DirectorySearcher search = new DirectorySearcher(de)) { search.PropertiesToLoad.Add("cn"); search.PropertiesToLoad.Add("employeeid"); searc

我正在使用以下代码查询我们的Active Directory:

            using (DirectorySearcher search = new DirectorySearcher(de))
            {
                search.PropertiesToLoad.Add("cn");
                search.PropertiesToLoad.Add("employeeid");
                search.PropertiesToLoad.Add("employeenumber");
                search.PropertiesToLoad.Add("distinguishedname");
                search.PropertiesToLoad.Add("mail");
                search.Filter = @"(&(objectClass=user)(employeeid=*)(employeenumber=*))";
                search.PageSize = 3000;

                SearchResultCollection src = search.FindAll();
                foreach (SearchResult rec in src)
                {
                    yield return new ADUser()
                    {
                        Name = rec.Properties["cn"][0].ToString(),
                        Path = rec.Properties["distinguishedname"][0].ToString(),
                        Acctno = rec.Properties["employeeid"][0].ToString(),
                        Personno = rec.Properties["employeenumber"][0].ToString(),
                        Email = rec.Properties["mail"][0].ToString()
                    };
                }

            }
如您所见,我试图将结果转换为我自己的类的IEnumerable列表,定义如下:

    public class ADUser
    {
        public string Name { get; set; }
        public string Path { get; set; }
        public string Acctno { get; set; }
        public string Personno { get; set; }
        public string Email { get; set; }
    }
但是,每当我碰到没有电子邮件条目的用户时,我的代码就会崩溃。当用户没有电子邮件时,搜索结果似乎不包含邮件属性。有没有办法让结果返回一个null或空值的属性

感谢您的帮助。

评论后编辑:

if (rec.Properties.Contains("mail") && rec.Properties["mail"] != null)
{
  Email = rec.Properties["mail"][0].ToString()
}
else
{
   Email = "No mail"; # or Email = ""; if you want no text returned 

}

您应该能够使用??带有电子邮件字符串的null合并运算符

string s1 = null; string s2 = s1 ?? "S1 was null." // Prints: s2 == "S1 was null."

你确定OP试图访问空数组的第一个元素时不会发生崩溃吗?谢谢,这样就可以了。我希望AD执行起来更像一个真正的查询,至少返回一个空值的属性,而不是完全不返回属性。问题很可能是索引器[0]的电子邮件字段可能为空,因此??不会工作我想:var email=rec.Properties[mail][0].ToString??ToString永远不会返回空值,所以它不会返回空值