У меня есть ExpandoObject
и хочу создать getter для него, который вернет свойство по имени во время выполнения, где имя указано в строке вместо hardcoded.
Например, я МОГУ сделать это:
account.features.isEmailEnabled;
и это вернет true. account
является ExpandoObject
, а features
также является ExpandoObject
. Поэтому у меня есть ExpandoObject
, который содержит другие ExpandoObjects
.
Итак, что я хочу сделать, это:
account.features.GetProperty("isEmailEnabled");
и вернуть это значение true.
Причина в том, что у меня много функций, и я хочу иметь возможность написать один общий метод getter, где я могу передать имя функции, которую я хочу, и метод передаст мне значение для account.features. где бы то ни было (где "все" указано, передавая строку в общий метод getter). В противном случае мне придется писать 30-х точечных для каждой функции.
Я много исследовал и пытался сделать что-то вроде:
var prop = account.features.GetType();
// this returns System.Dyanmic.ExpandoObject
за которым следует
var value = prop.GetProperty(featureNameAsString);
но value
всегда возвращается как null. Я не понимаю, почему. В окне просмотра я могу сделать account.features.isEmailEnabled
, и он показывает true и говорит, что он является логическим. Но если я попытаюсь получить это значение, используя вышеприведенный подход и передав isEmailEnabled
в качестве featureNameAsString
, я просто получаю null.
Может кто-нибудь, пожалуйста, скажите мне, что я могу делать неправильно, и какой хороший подход, не будучи слишком сложным?
Я работаю с ASP.NET в рамках 4.5.1.