从 C# 中的托管对象属性获取值的最佳方法

Best Way to get values from Managed Objects Attribute in C#

在 C# 中获取 Active Directory 值时,我的正常过程是使用主体上下文来获取大部分这些值。还有一些东西我需要 LDAP 来获取,因为它们不能从用户主体对象获得。对于这些属性,我使用底层对象来访问目录条目。我做了一个方法来检查 属性 是否存在,方法是检查它是否为空。如果它不为空,我 return 作为字符串的值。我使用类似于下面列出的代码来完成此操作:

      if (directoryEntrygroup.Properties[directoryEntryPropertyName].Value != null)
            {
                returnValue = directoryEntrygroup.Properties[directoryEntryPropertyName].Value.ToString();
            }

这对于不包含值列表的属性非常有效,例如 "cn" 或 "department." 但是对于 "ManagedObjects" 这样确实具有某种类型的属性集合但 returned 作为对象,获取这些值的最佳方法是什么?对于它的价值,此代码位于 SSIS 中的脚本任务中,用于使用 Framework 4.0 的 SQL Server 2012。

我在访问 LDAP 属性 时没有意识到它是一个集合,而不是一个单值。如果您碰巧 return 是一个奇异值,那么我问题中的代码就可以工作。但是,如果您有多个结果 returned,您将收到一个 System.Object[]。就我而言,我的用户(管理员或经理)管理着不止一个对象,这就是我收到 System.Object[]

的原因

话虽如此,对象 return 作为可枚举集合,即使只有一个值被 returned。

我解决这个问题的方法是稍微更改我的代码:

      foreach (object thisvalue in directoryEntrygroup.Properties[directoryEntryPropertyName])
                    {
                       debug.writeline = thisvalue.ToString();                                                    
                    }

据我所知,此解决方案适用于 return 有多个值的任何 LDAP 属性,例如组的 "MemberOf" 属性对象

这是一篇讨论 属性 值集合的文章: https://msdn.microsoft.com/en-us/library/ms180859(v=vs.80).aspx

希望这对您有所帮助。