Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda