system.reflection.fieldinfo.attributes

жный дубликат:
Поиск имени переменной, переданной функции в C #

Класс ниже содержит поле города.

Мне нужно динамически определить имя поля, как оно введено в объявлении класса, т. Е. Мне нужно получить строку "city" из экземпляра объекта city.

Я попытался сделать это, изучив его тип в DoSomething (), но не могу найти его при проверке содержимого типа в отладчике.

Является ли это возможным?

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!
  }
}

Некоторые люди в своих ответах ниже спрашивают меня, почему я хочу это сделать. Вот почему

В моей реальной ситуации над городом есть свой атрибут.

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

Мне нужен этот атрибут в другом коде. Чтобы получить атрибут, я использую отражение. И в коде отражения мне нужно ввести строку "город"

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
  }

}

Теперь это не тип безопасно. Если бы я изменил переменную "city" на "workCity" в объявлении поля в Person, эта строка потерпела бы неудачу, если бы я не знал, чтобы обновить строку

if (field.Name == "workCity")
//I have to make this change in another file for this to still work, yuk!
{
}

Поэтому я пытаюсь найти способ передать строку в этот код, не вводя его физически.

Да, я мог бы объявить его как строковую константу в Person (или что-то в этом роде), но это все равно означало бы вводить его дважды.

Уф! Это было сложно объяснить !!

Спасибо

Спасибо всем, кто ответил на это * много *. Это отправило меня на новый путь, чтобы лучше понять лямбда-выражения. И это создало новый вопрос.

Ответы на вопрос(2)

Ваш ответ на вопрос