2012-09-25 5 views
-1

J'ai juste besoin de savoir comment serait l'expression lambda C# à vb.net.comme exprimé dans vb.net cette expression lambda

if ((object)publicProperties != null && publicProperties.Any()) 
     { 
      return publicProperties.All(p => 
      { 
       var left = p.GetValue(this, null); 
       var right = p.GetValue(other, null); 


       if (typeof(TValueObject).IsAssignableFrom(left.GetType())) 
       { 
        //check not self-references... 
        return Object.ReferenceEquals(left, right); 
       } 
       else 
        return left.Equals(right); 


      }); 
     } 

Dans vb, l'expression est comme suit moi,

Dim left = Nothing 
      Dim Right = Nothing 

      If DirectCast(publicProperties, Object) IsNot Nothing AndAlso publicProperties.Any() Then 
       Return publicProperties.All(Function(p) (left() = p.GetValue(Me, Nothing))(Right() = p.GetValue(other, Nothing))) 


       If GetType(TValueObject).IsAssignableFrom(left.[GetType]()) Then 
        'check not self-references... 
        Return [Object].ReferenceEquals(left, Right) 
       Else 
        Return left.Equals(Right) 


       End If 

      Else 
       Return True 
      End If 

Je me demande si cette expression serait correct, merci

+1

Avez-vous vraiment besoin de réflexion pour comparer des objets? –

+0

Je ne comprends pas parfaitement votre question. Peut-être que c'est de ma faute, mais juste en train de dire. –

Répondre

0

Votre version VB ne semble pas sain du tout. Essayez ceci:

If CObj(publicProperties) IsNot Nothing AndAlso publicProperties.Any() Then 
     Return publicProperties.All(Function(p) 
       'check not self-references... 
      Dim left = p.GetValue(Me, Nothing) 
      Dim right = p.GetValue(other, Nothing) 
      If GetType(TValueObject).IsAssignableFrom(left.GetType()) Then 
       Return Object.ReferenceEquals(left, right) 
      Else 
       Return left.Equals(right) 
      End If 
     End Function) 
    End If