Быстрый способ преобразования RouteValueDictionary в анонимный объект? - PullRequest
6 голосов
/ 23 сентября 2011

У меня есть MVC3 RouteValueDictionary, который я хочу быстро преобразовать в анонимный тип.

например:

new RouteValueDictionary(){{"action","search"}}

будет таким же, как

new {action="search"}

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

Это невозможно сделать во время выполнения.Свойства анонимного типа должны быть известны заранее, во время компиляции.

1 голос
/ 19 апреля 2013

NB этот ответ вызван тем фактом, что я думаю, что он интересен, однако его, вероятно, (определенно) не следует использовать для производственного кода.шаблон), который содержит все ключи словаря, которые вас интересуют, тогда вы можете использовать следующий метод:

public static class RouteValueDictionaryExtensions
{
  public static TTemplate ToAnonymousType<TTemplate>(this RouteValueDictionary dictionary, TTemplate prototype)
  {
    var constructor = typeof(TTemplate).GetConstructors().Single();

    var args = from parameter in constructor.GetParameters()
        let val = dictionary.GetValueOrDefault(parameter.Name)
        select val != null && parameter.ParameterType.IsAssignableFrom(val.GetType()) ? (object) val : null;

    return (T) constructor.Invoke(args.ToArray());
  }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...