Vale odio ver en el código: dependencias con el contenido de un string. Me desespera.
Siempre que puedo uso enumerados constantes.. y esta vez no sería diferente.
Quería conocer en cadena el nombre de una propiedad
Es decir miobj.DNI Obtener "DNI"
Imports System.Linq.Expressions
Private Sub Prueba(sender As System.Object, e As System.EventArgs)
Dim miobj As miClase = New miClase() With {.DNI = "numero pasaporte", .Nombre = "mi nombre completo"}
Dim nombrePropiedad As String = GetPropertyName(Function() miobj.DNI)
Console.Write(nombrePropiedad) 'DNI
Dim nombrePropiedad2 As String = GetPropertyNameB(Function(myObj As miClase) myObj.Nombre)
Console.Write(nombrePropiedad2) 'Nombre
End Sub
Public Shared Function GetPropertyName(Of T)(ByVal expression As Expressions.Expression(Of Func(Of T))) As String
Dim memberExpression As Expressions.MemberExpression = DirectCast(expression.Body, Expressions.MemberExpression)
Return memberExpression.Member.Name
End Function
Public Function GetPropertyNameB(Of TModel, TProperty)(ByVal [property] As Expression(Of Func(Of TModel, TProperty))) As String
Dim memberExpression As MemberExpression = DirectCast([property].Body, MemberExpression)
Return memberExpression.Member.Name
End Function
End Class
Public Class miClase
Private _dni As String
Private _nombre As String
Public Property DNI() As String
Get
Return _dni
End Get
Set(ByVal value As String)
_dni = value
End Set
End Property
Public Property Nombre() As String
Get
Return _nombre
End Get
Set(ByVal value As String)
_nombre = value
End Set
End Property
End Class
El ejemplo es mío, pero la solución no.
http://stackoverflow.com/questions/10606841/how-can-i-get-a-property-name-for-a-type-without-the-need-to-instantiate-an-obje
http://www.codeproject.com/Questions/253756/Linq-Get-Property-Name-using-VB-Net
Vale en próxima versiones lo tendremos más fácil por lo menos en C# 6.0
https://roslyn.codeplex.com/discussions/552376
No hay comentarios:
Publicar un comentario