1

我有以下代码:

// Create a DirectorySearcher object.
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.SearchScope = SearchScope.Base;

// Use the FindOne method to find the user object.
SearchResult resEnt = mySearcher.FindOne();

foreach(string propKey in resEnt.Properties.PropertyNames)
{
   foreach (var property in resEnt.Properties[propKey])
   {
       Console.WriteLine("{0}:{1}", propKey, property.ToString());
   }
}

这很好用,但我只需要获得一个名为“mail”的属性。无论如何我可以只读取一个属性而不必循环。我正在寻找这样的东西:

var emailAddress =  resEnt.Properties["mail"];
4

3 回答 3

5

你可能想要:

string emailAddress = (string)resEnt.Properties["mail"][0];

请注意,您可能需要在此处进行一些检查以确保存在有效的“邮件”属性:

var mailProps = resEnt.Properties["mail"];
string emailAddress = mailProps.Count > 0 ? (string)mailProps[0] : string.Empty;
于 2012-08-15T00:05:55.353 回答
1

更新工作

您的示例将返回单个属性。问题是返回的是一个集合。我建议做

// Or String if you know it's always a string
var mailCollection = resEnt.Properties["mail"].Cast<Object>(); 
var emailAddress = mailCollection.FirstOrDefault();

如果使用FirstOrDefault它将返回第一个值或 null。如果您使用Single,或者[0]您必须事先执行验证步骤,或者捕获在没有返回结果时抛出的异常。

于 2012-08-15T00:05:38.137 回答
0

将强制转换操作与 LINQ 结合使用以获取第一个对象。

var email = resEnt.Properties["mail"].Cast<object>.FirstOrDefault();
于 2012-08-15T00:11:16.463 回答