2013-11-12 5 views
-1

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

Например

string userInput = "PropertyName"; 
string newValue = "some value"; 
MyClass c = new MyClass(); 
c.PropertyName = newValue; 

Но я не знаю, как найти свойства пользовательского класса по имени таким образом.

Может ли кто-нибудь предложить наиболее сжатый способ достижения этого, пожалуйста.

+4

Вы можете использовать Reflection, но вы должны, вероятно, пересмотреть дизайн. Возможно, вместо этого сделайте индексатор. – Magus

+2

Пользователи не выбирают свойства класса. Будьте осторожны, чтобы не смешивать проектные решения пользовательского интерфейса с решениями по разработке кода. Ключевые значения Пары, такие как «Словарь <>», могут использоваться для выбора элемента на основе ввода строки с консоли. –

+0

@ P.Brian.Mackey Исключение, конечно, являются инструментами dev, где вы можете иметь дело с членами класса по имени –

ответ

2

Использование отражений:

var prop = c.GetType().GetProperty(userInput,BindingFlags.Public | BindingFlags.Instance) 
if(prop != null && prop.CanWrite) 
{ 
    prop.SetValue(c,newValue,null); 
} 
+0

Спасибо за это, но я получаю ошибку компиляции «Нет перегрузки для SetValue принимает 2 аргумента». Пожалуйста, порекомендуйте. – PJW

+0

А, ок. Этот метод является новым в .NET 4.5. Прежде чем использовать метод SetValue с 3 параметрами. Я обновил ответ. –

0

спасибо за ссылку на значение свойства с помощью отражения

Я был в состоянии использовать следующие для достижения моих целей

PropertyInfo propertyInfo = c.GetType().GetProperty(userInput); 
propertyInfo.SetValue(c, Convert.ChangeType(newValue, propertyInfo.PropertyType), null); 
Смежные вопросы