Ошибка VB.NET - исключение Null Reference может возникнуть во время выполнения при использовании результата - PullRequest
0 голосов
/ 28 апреля 2011

Справочная информация: я написал код, который будет выводить все зарегистрированные в данный момент имена групп Active Directory пользователя.Я хочу, чтобы имя группы (например, Acomp_user_BIG) через IdentityReference.Translate вместо идентификаторов SID текущего пользователя (например, S-1-5-32-544) возвращалось через IdentityReference.Value.

Вот код, который я использовал:

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. 

Любые предложения по исправлению этой ошибки

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

A Get свойство должно возвращать значение .Ваша собственность не делает этого;вы просто печатаете некоторые вещи на консоли.Это не то, для чего существует свойство.

Свойство Get должно Return иметь определенное значение и не должно делать ничего другого.Если вы хотите выполнить некоторую логику с побочными эффектами, используйте Sub.Если вы также хотите вернуть значение, используйте Function.

Только используйте свойства, если вы просто хотите вернуть какое-то значение без вычисления с побочными эффектами.

2 голосов
/ 28 апреля 2011

Ваш код ничего не возвращает ни в одном из путей кода.

Я не уверен, что вы хотите, чтобы он возвращал, но возвращение коллекции будет соответствовать типу свойства:

Return irc

Это, однако, сделает большую часть кода в свойстве ненужным, поэтому, возможно, вам нужен другой тип возвращаемого значения, или, возможно, вы вообще не хотите создавать свойство.

1 голос
/ 28 апреля 2011
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) и вернуть вашу новую коллекцию

...