0

背景: 現在ログインしているユーザーの Active Directory グループ名をすべて出力するコードを書きました。IdentityReference.Value を介して返される現在のユーザーの SID (例: S-1-5-32-544) の代わりに、IdentityReference.Translate を介してグループ名 (例: Acomp_user_BIG) が必要です。

私が使用したコードは次のとおりです。

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 に答える