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」というプロパティを 1 つだけ取得する必要があります。とにかく、ループすることなく単一のプロパティを読み取ることができますか。私はこのようなものを探しています:

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 に答える