¿Cómo se obtiene el nombre de una variable ya que se escribió físicamente en su declaración? [duplicar

Posible duplicado:
Encontrar el nombre de la variable pasado a una función en C #

La siguiente clase contiene la ciudad de campo.

Necesito determinar dinámicamente el nombre del campo a medida que se escribe en la declaración de clase, es decir, necesito obtener la cadena "ciudad" de una instancia de la ciudad objeto.

He intentado hacer esto examinando su Tipo en DoSomething () pero no puedo encontrarlo al examinar 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. Este es el por qué

En mi situación en el mundo real, hay un atributo personalizado sobre la ciudad.

[MyCustomAttribute("param1", "param2", etc)]
public string city = "New York";

Necesito este atributo en otro código. Para obtener el atributo, uso la reflexión. Y en el código de reflexión necesito escribir la cadena "city"

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 esto no es seguro para el tipo. Si cambiara la variable "ciudad" a "workCity" en mi declaración de campo en Persona, esta línea fallaría a menos que supiera 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 alguna forma de pasar la cadena a este código sin escribirlo físicamente.

Sí, podría declararlo como una cadena constante en Persona (o algo así) pero eso todavía estaría escribiendo dos veces.

¡Uf! ¡Eso fue difícil de explicar!

Gracia

Gracias a todos los que respondieron esto * mucho *. Me envió a un nuevo camino para comprender mejor las expresiones lambda. Y creó una nueva pregunta.

Respuestas a la pregunta(11)

Su respuesta a la pregunta