Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!