valor una tener sirve que propiedades propiedad para obtener nombre metodo mandar llamar informatica devuelto declarar debe como clase atributos c# reflection properties gettype

tener - propiedades de una clase c#



¿Cómo obtener el nombre de una propiedad de clase? (5)

¿Hay alguna forma puedo obtener el nombre de la propiedad de clase IntProperty ?

public class ClassName { public static int IntProperty { get { return 0; } } } //something like below but I want to get the string of "IntProperty" ClassName.IntProperty.GetType().Name

Básicamente, lo que quiero hacer es guardar dinámicamente la cadena de nombre de propiedad en la base de datos, y luego recuperarla de la base de datos e invocar la propiedad dinámicamente.

Parece que lo que estoy buscando es similar a la escritura de pato, creo.

¡Gracias!

ACTUALIZADO:

Este es el código real. Esto es más como un tipo de flujo de trabajo. Pero cada tarea se define como propiedad de una clase (la clase se usa para agrupar tareas).

public class ApplicationTask { public static Task<string> SendIncompleteNotification { get { return new Task<string> ( a => Console.WriteLine("Sample Task") , "This is a sample task which does nothing." ); } } }

Por lo tanto, el código podrá recuperar el nombre completo de la clase y la propiedad algo así como: namespace.ApplicationTask.SendIncompleteNotification y guardar esto en la base de datos. Más adelante, el código leerá la cadena y creará la tarea dinámicamente y la pasará a otra para ejecutarla.


Con C # 6.0 puedes conseguirlo por

nameof(ClassName.IntProperty)


Creo que el uso del método GetProperty en este caso es redundante, ya que necesita saber el nombre de la propiedad para llamar al método.

Podrías recorrer tus propiedades y extraer su nombre:

foreach (PropertyInfo p in typeof(ClassName).GetProperties()) { string propertyName = p.Name; //.... }


El resultado de ClassName.IntProperty es solo un valor entero. Tan pronto como se ejecuta y se devuelve el resultado, no hay rastro de que provenga de IntProperty .

Si está utilizando .NET 3.5, puede usar un árbol de expresiones, generalmente creado a través de una expresión lambda:

Expression<Func<int>> exp = () => ClassName.IntProperty;

Luego puede compilar y ejecutar la expresión y averiguar por separado lo que está haciendo (recuperando IntProperty en este caso). No estoy realmente seguro de si esto es adecuado para lo que quieres hacer.

Si se resuelve cómo guardar el nombre de la propiedad en la base de datos, entonces GetProperty es la manera de ir en el frente de recuperación.

Quizás si pudiera dar más contexto a la pregunta en términos de cómo desea usar esto, podríamos ayudar más. Solo ha mostrado una expresión; si pudiera mostrarla en términos de dónde la usaría, sería genial.

EDITAR: Has expandido la propiedad, pero no cómo se llama. ¿ Necesita llamarlo directamente, en lugar de simplemente obtener la lista de propiedades usando Type.GetProperties y almacenar la lista de nombres de propiedades en la base de datos?

Nuevamente, si puede mostrar el código que llama a la propiedad y cómo desea que interactúe con la base de datos, es posible que podamos avanzar más.


Me encontré con esto, y parece muy útil para obtener el nombre de la propiedad. (C ++)

#define getVarName(varName,holder) sprintf(holder, "%s", #varName) int main() { int var = 100; // just any type of identifier char name[100]; // it will get the variables name getVarName(var, name); puts(name); return 0; }

ref: http://zobayer.blogspot.com/2010/05/c-fun-get-variables-name.html


Type objectType = this.GetType(); PropertyInfo property = objectType.GetProperty("intProperty"); System.Console.Write(property.Name);

¿Esto es lo que necesitas?