viernes, 6 de marzo de 2015

Nombre de una propiedad


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