c# - CallerMemberName en.NET 4.0 no funciona
.net-4.0 bcl (3)
Estoy intentando usar el atributo CallerMemberName
en .NET 4.0 a través del paquete de portabilidad BCL. Siempre está devolviendo una cadena vacía en lugar del nombre del miembro. ¿Qué estoy haciendo mal?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MessageBox.Show(new class2().CallMe);
}
}
public class class2
{
public string CallMe
{
get
{
return HelpMe();
}
}
private string HelpMe([CallerMemberName] string param = "")
{
return param;
}
}
Como sé, CallerMemberName
es compatible con .Net 4.5 No debe usarlo en .Net 4.0
Alguien implementó esto en .Net 4.0 usando StackTrace. por ejemplo: http://www.journeyintocode.com/2013/04/callermembername-net-40.html
PERO, NO te recomiendo que uses StackTrace ya que podría haber un impacto en el rendimiento. Usar StackTrace para obtener el nombre de la persona que llama es muy lento. Y esto funciona en Depuración, en la versión no puede estar seguro de si StackTrace es "correcto" o no.
Por lo tanto, mi sugerencia es: Simplemente use CallerMemberName
en .Net 4.5 o versión posterior. En la versión anterior de .Net, no hay ninguna manera infalible o rápida de hacerlo.
Targeting 4.0 funciona bien si agrega:
namespace System.Runtime.CompilerServices {
sealed class CallerMemberNameAttribute : Attribute { }
}