Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

174
Vistas
expresión nameof en .net framework 4

La expresión "nameof" se introduce en Visual Studio 2015 y c# 6

nombre de (Referencia de C# y Visual Basic)

¿Cómo puede usarlo o escribir un método similar en versiones anteriores como .net framework 4?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está hablando de un equivalente para C # antes de C # 6, esto hará el trabajo (de una manera pirateada) para las propiedades. Probablemente se pueda ampliar para incluir campos, métodos, etc.

 public static class TestExtension { public static String nameof<T, TT>(this T obj, Expression<Func<T, TT>> propertyAccessor) { if (propertyAccessor.Body.NodeType == ExpressionType.MemberAccess) { var memberExpression = propertyAccessor.Body as MemberExpression; if (memberExpression == null) return null; return memberExpression.Member.Name; } return null; } }

Acabo de preparar esto rápidamente, por lo que hay mucho que mejorar, pero lo usas así:

 public class myClass { public string myProp { get; set; } } var a = new myClass(); var result = a.nameof(b => b.myProp);

El resultado contiene 'myProp'

Actualizar:

Más completo (aunque todavía no tan bonito)

 public static class TestExtension { public static String nameof<T, TT>(this Expression<Func<T, TT>> accessor) { return nameof(accessor.Body); } public static String nameof<T>(this Expression<Func<T>> accessor) { return nameof(accessor.Body); } public static String nameof<T, TT>(this T obj, Expression<Func<T, TT>> propertyAccessor) { return nameof(propertyAccessor.Body); } private static String nameof(Expression expression) { if (expression.NodeType == ExpressionType.MemberAccess) { var memberExpression = expression as MemberExpression; if (memberExpression == null) return null; return memberExpression.Member.Name; } return null; } }

Acceso a propiedades/campos estáticos:

 TestExtension.nameof(() => myClass.MyOtherField)

Acceso a parámetros dentro de funciones:

 void func (int a) { TestExtension.nameof(() => a); }
over 4 years ago · Santiago Trujillo Denunciar

0

nameOf : se resuelve en Compiletime : si descompila, verá que el compilador simplemente tradujo el nombre de la clase (sin el espacio de nombres (!)) en una cadena constante. ¡Así que ten cuidado!

Si desea obtener el nombre de una clase, use typeof() o GetType() para obtener el tipo específico (tal vez derivado) en tiempo de Runtime y lea el valor de
la .Name en .net < C#6.

Leer más en MSDN

over 4 years ago · Santiago Trujillo Denunciar

0

Que yo sepa, hay tres opciones para no tener que usar una cuerda mágica

  1. cuyo nombre requiere Visual Studio 2015 (pero se puede compilar en otras versiones de .net framework)

     nameof(this.Property)
  2. use un método que tome una expresión y devuelva el nombre de la propiedad como se encuentra en esta publicación " Obtener el nombre de cadena de la propiedad usando la reflexión "

     var propertyName = GetPropertyName( () => myObject.AProperty); // returns "AProperty"
  3. CallerMemberNameAttribute: (solo disponible en .NET Framework 4.5, incluido porque la publicación original decía versiones anteriores como .NET Framework 4.0, que supongo que incluye 4.5) La desventaja de este método es que solo es útil cuando necesita una representación en cadena del método actual usted está operando en.

     public string IsChecked { set{ Console.WriteLine(GetCurrentMemberName()); // prints "IsChecked" } } string GetCurrentMemberName([CallerMemberName] string memberName = "") { return memberName; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda