none
ReadOnlyActiveDirectorySchemaPropertyCollection コレクションの中身について RRS feed

  • 質問

  • いつも参考になっています。

    Active Directory の操作でちょっと判らないところが出たので、教えてください。

    using System;
    using System.DirectoryServices;
    using System.DirectoryServices.ActiveDirectory;

    class Program {
        static void Main( string[] args ) {
            DirectoryContext context;
            context = new DirectoryContext(DirectoryContextType.Forest,"somewhere.co.jp","username","password");
            ActiveDirectorySchemaClass schema;
            schema = new ActiveDirectorySchemaClass(context, "distinguishedName");
            ReadOnlyActiveDirectorySchemaPropertyCollection props;
            props = schema.GetAllProperties();
           
            if( props.Count > 0 )
                System.Console.WriteLine(props[0].GetType().ToString());
        }
    }

    distinguishedName 属性のスキーマを取得しようとしています。ReadOnlyActiveDirectorySchemaPropertyCollection 型のコレクションを取得しているのです。

    マニュアルによるとこのコレクションは、ActiveDirectorySchemaProperty 型のオブジェクトを含むはずなのですが、最後の WriteLine で型名を出力しようとすると、次のようなエラーが出ました。

    ハンドルされていない例外: System.InvalidCastException: 型 'System.DirectoryServices.ActiveDirectory.ActiveDirectorySchemaPropertyCollection' のオブジェクトを型'System.DirectoryServices.ActiveDirectory.ActiveDirectorySchemaProperty' にキャストできません。
       場所 System.DirectoryServices.ActiveDirectory.ReadOnlyActiveDirectorySchemaPropertyCollection.get_Item(Int32 index)
       場所 Test.Program.Main(String[] args) 場所 D:\Test\Test\Program.cs:行 18

    ReadOnlyActiveDirectorySchemaPropertyCollection 型のコレクションのオブジェクト props に保存されている最初のアイテムを、props[0] として参照しようとしている時点で、ActiveDirectorySchemaProperty としては参照できないよ、と言われていると思うのですが、マニュアルによるとこのコレクションの中身は、ActiveDirectorySchemaProperty です。

    ちなみに、クイック ウォッチで見ると、list の中身は ReadOnlyActiveDirectorySchemaPropertyCollection でした。

    このエラーは、なぜに発生しているのでしょう...。

    Visual Studio 2005 + .NET Framework 2.0

    2006年11月21日 10:20