Duplicar posible:
Finding the Variable Name passed to a Function in C#¿Cómo se obtiene el nombre de una variable como se escribió físicamente en su declaración?
La clase siguiente contiene todos los campo ciudad.
Necesito determinar dinámicamente el nombre del campo tal como está escrito en la declaración de clase , es decir, necesito obtener la cadena "ciudad" de una instancia de la ciudad del objeto.
He intentado hacer esto examinando su Tipo en DoSomething() pero no puedo encontrarlo cuando examino el contenido del Tipo en el depurador.
¿Es posible?
public class Person
{
public string city = "New York";
public Person()
{
}
public void DoSomething()
{
Type t = city.GetType();
string field_name = t.SomeUnkownFunction();
//would return the string "city" if it existed!
}
}
Algunas personas en sus respuestas a continuación me han preguntado por qué quiero hacer esto. He aquí por qué.
En mi situación en el mundo real, hay un atributo personalizado por encima de la ciudad.
[MyCustomAttribute("param1", "param2", etc)]
public string city = "New York";
Necesito este atributo en otro código. Para obtener el atributo, uso reflection. Y en el código reflexión tengo que escribir la cadena "ciudad"
MyCustomAttribute attr;
Type t = typeof(Person);
foreach (FieldInfo field in t.GetFields())
{
if (field.Name == "city")
{
//do stuff when we find the field that has the attribute we need
}
}
Ahora bien, esto no es un tipo seguro. Si cambiara la variable "ciudad" a "workCity" en mi declaración de campo en persona esta línea sería un fracaso a menos que sabía para actualizar la cadena
if (field.Name == "workCity")
//I have to make this change in another file for this to still work, yuk!
{
}
Así que estoy tratando de encontrar la manera de pasar la cadena de este código sin tipearlo físicamente
Sí, podría declararlo como una constante de cadena en Persona (o algo por el estilo) pero aún estaría tipeando dos veces.
¡Uf! ¡Eso fue difícil de explicar!
Gracias
Gracias a todos los que respondieron a esta * mucho *. Me envió a un nuevo camino para entender mejor las expresiones lambda. Y creó una nueva pregunta.
Alight, He editado mi respuesta, y ahora lamentablemente tengo que ir a la cama, así que usted está por su cuenta de aquí en adelante. –
En C# 6.0 y superior, puede usar la función 'nameof' para obtenerlo es decir, 'nameof (city)' devolverá 'city' –