0

背景:我编写的代码将输出所有当前登录的用户的 Active Directory 组名。我希望通过 IdentityReference.Translate 获得组名(例如:Acomp_user_BIG),而不是通过 IdentityReference.Value 返回当前用户的 SID(例如:S-1-5-32-544)。

这是我使用的代码:

Public ReadOnly Property Groups As IdentityReferenceCollection
    Get
         Dim irc As IdentityReferenceCollection
         Dim ir As IdentityReference
         irc = WindowsIdentity.GetCurrent().Groups

         For Each ir In irc
              Dim account As IdentityReference = ir.Translate(GetType(NTAccount))
              Debug.WriteLine(account.Value)
         Next

    End Get
End Property

不幸的是,我在“End Get”中收到错误:

   Warning  1   Property 'Groups' doesn't return a value on all code paths. 
                A null reference exception could occur at run time when the 
                result is used. 

修复此错误的任何建议?

4

3 回答 3

2

您的代码不会在任何代码路径中返回任何内容。

我不确定您希望它返回什么,但返回集合将匹配属性的类型:

Return irc

然而,这将使属性中的大部分代码变得不必要,因此您可能想要不同的返回类型,或者您根本不想创建属性。

于 2011-04-28T15:44:26.380 回答
2

一个Get属性应该返回一个值。您的财产不这样做;您只是在控制台上打印一些东西。这不是房产的用途。

一个Get属性应该Return有价值,除此之外不应该做太多其他事情。如果要执行一些具有副作用的逻辑,请使用Sub. 如果您还想返回一个值,请使用Function.

当您只想返回一些值而没有副作用的计算时才使用属性。

于 2011-04-28T15:44:58.787 回答
1
Public ReadOnly Property Groups As IdentityReferenceCollection
    Get
         Dim irc As IdentityReferenceCollection
         Dim ir As IdentityReference
         irc = WindowsIdentity.GetCurrent().Groups

         For Each ir In irc
              Dim account As IdentityReference = ir.Translate(GetType(NTAccount))
              Debug.WriteLine(account.Value)
         Next

         **return irc**
    End Get
End Property

但是,通过查看代码,irc 会被修改,因此您应该创建一个新的 IdentityReferenceCollection(假设它具有 .add() 方法)然后执行 .add(account) 并返回您的新集合

于 2011-04-28T15:52:35.507 回答