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