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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从C#中的托管对象属性获取值的最佳方法相关的知识,希望对你有一定的参考价值。

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

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

对于不包含值列表的属性(例如“cn”或“department”),这非常有效。但是对于像“ManagedObjects”这样的属性,它们确实有某种类型的集合但是作为对象返回,获取这些值的最佳方法是什么?为了它的价值,这段代码在使用Framework 4.0的SQL Server 2012的SSIS中的脚本任务中。

答案

我没有意识到访问LDAP属性时,它是一个集合,而不是一个单数值。如果你碰巧返回一个奇异值,我问题中的代码就可以了。但是,如果您返回了多个结果,则会收到System.Object[]。在我的情况下,我有用户(管理员或经理),他们管理的对象不止一个,这就是我收到System.Object[]的原因

话虽如此,该对象作为可枚举集合返回,即使只返回一个值。

我解决问题的方法是稍微改变我的代码:

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

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

这是一篇关于财产价值收集的文章:https://msdn.microsoft.com/en-us/library/ms180859(v=vs.80).aspx

希望这可以帮助。

以上是关于从C#中的托管对象属性获取值的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在另一个活动托管的片段之间传递数据的最佳实践

从异步 Web 服务响应更新托管对象的最佳方法?

从 cellForRowAtIndexPath 中的 Firebase 获取值的最佳方法?

对对象列表的属性求和/平均

Yii2 - 获取所有唯一模型属性值的最佳方法是啥?

如何从片段中的 JSON 响应中的对象获取数据