Использование переменной для доступа к значению члена объекта - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить доступ к значениям члена следующего класса:

public class EditorialDateFormat
{
       public string en; <------ TRYING TO GET ITS VALUE
       public string fr; <------ OR THIS VALUE
       public string Default;<-- OR THIS ONE
 }
public class Params
{
      public string Template;
      public string MainTagID;
      public string[] NavigationFilters;
      public EditorialDateFormat EditorialDateFormat;
}
public class Site
{
      public string Name;
      public string CreationFolder;
      public Params Params;
      public string[] Feed;
      public string Endpoint;
      public string[] TargetDatabases;
}

Я мог бы сделать это легко, как: site.Params.EditorialDateFormat.en (например), но строка "en" фактически сохраняется в переменной.

Я попробовал следующий код:

// Myvariable contains "en"
object c = GetPropValue(site.Params.EditorialDateFormat, MyVariable); 

public static object GetPropValue(object src, string propName)
{
    return src.GetType().GetMember(propName);
}

Но он возвращает мне MemberInfo объект без члена значение Буду признателен за помощь! Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018
public class EditorialDateFormat
{
    private string _en;

    public string en
    {
        get { return !string.IsNullOrEmpty(_en) ? _en : fr; }
        set { _en = value; }
    }
    private string _fr;

    public string fr
    {
        get { return !string.IsNullOrEmpty(_fr) ? fr : Default; }
        set { _en = value; }
    }

    public string Default { get; set; }
}

и вы можете использовать его как var c=site.Params.EditorialDateFormat.en элегантно

0 голосов
/ 14 сентября 2018

Вы хотите прочитать поле (значение поля открытого экземпляра), поэтому мы ставим GetField:

//TODO: rename the method: it doesn't read property (Prop) 
public static object GetPropValue(object src, string propName) {
  return src
    .GetType()
    .GetField(propName, BindingFlags.Public | BindingFlags.Instance)
    .GetValue(src);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...