VB.NET错误-使用结果时,运行时可能发生Null引用异常



背景:我编写的代码将输出当前登录的所有用户的Active Directory组名称。我想要通过IdentityReference获得组名(例如:Acomp_user_BIG(。翻译而不是通过IdentityReference返回的当前用户的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. 

有什么解决这个错误的建议吗?

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

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

Return irc

然而,这会使属性中的大多数代码变得不必要,所以也许您想要不同的返回类型,或者可能根本不想创建属性。

Get属性应返回值。你的财产并不能做到这一点;你只是把一些东西打印到控制台上。这不是一处房产的用途。

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

如果您只想返回某个值而不进行具有副作用的计算,则只有才使用属性。

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(并返回您的新收藏

相关内容

  • 没有找到相关文章

最新更新