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 (или что-то в этом роде), но это все равно означало бы вводить его дважды.
Уф! Это было сложно объяснить !!
Спасибо
Спасибо всем, кто ответил на это * много *. Это отправило меня на новый путь, чтобы лучше понять лямбда-выражения. И это создало новый вопрос.