我有以下代码:
// 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"];
你可能想要:
string emailAddress = (string)resEnt.Properties["mail"][0];
请注意,您可能需要在此处进行一些检查,以确保存在有效的"mail"属性:
var mailProps = resEnt.Properties["mail"];
string emailAddress = mailProps.Count > 0 ? (string)mailProps[0] : string.Empty;
更新为工作
您拥有的示例将返回单个属性。问题是返回的是一个集合。我建议做
// 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]
则必须事先执行验证步骤,或者捕获未返回任何结果时引发的异常。
将强制转换操作与 LINQ 结合使用来获取第一个对象。
var email = resEnt.Properties["mail"].Cast<object>.FirstOrDefault();