Linq ToDictionary возвращает анонимный тип - PullRequest
3 голосов
/ 30 ноября 2010

Я хочу вызвать метод, который возвращает анонимный тип.Мне нужно знать, что тип этого анонимного типа, потому что я возвращаю его в методе.Это называется «динамический»?Когда я отлаживаю, окно просмотра говорит, что тип <> f__AnonymousType0.

Вот мой код:

// this doesn't compile
public static Dictionary<int,dynamic> GetRuleNamesDictionary()
{
    List<ResponseRoutingRule> rules = GetResponseRoutingRules();    
    var q = (rules.Select(r => new {r.ResponseRoutingRuleId, r.RuleName}));

    var dict1 = q.ToDictionary(d => d.ResponseRoutingRuleId);
    var dict = q.ToDictionary(d => d.ResponseRoutingRuleId, d => d.RuleName);
    return dict;
}

public static List<ResponseRoutingRule> GetResponseRoutingRules()
{
   ....
}


public class ResponseRoutingRule
{
    public int ResponseRoutingRuleId { get; set; }
    ....
    public string RuleName { get; set; }
    ...
}

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Ну, на самом деле вы, похоже, возвращаете Dictionary<int, string>.Тип значений dict не является анонимным;это обычный старый string.На самом деле, здесь нет необходимости в анонимных типах или dynamic здесь.

Вы уверены, что это не то, что вы действительно хотите?

public static Dictionary<int, string> GetRuleNamesDictionary()
{
    return GetResponseRoutingRules()
            .ToDictionary(r => r.ResponseRoutingRuleId, r => r.RuleName);    
}

Если нет, пожалуйста, дайте нам знать, почему.

Если вы действительно хотите придерживаться dynamic, вы, конечно, можете разыграть соответственно:

public static Dictionary<int, dynamic> GetRuleNamesDictionary()
{
    return GetResponseRoutingRules()
            .ToDictionary(r => r.ResponseRoutingRuleId, r => (dynamic) r.RuleName);    
}
0 голосов
/ 02 декабря 2010

Что я действительно хочу сделать, так это вернуть динамический тип с двумя свойствами, называемыми ResponseRoutingRuleId и RuleName.Это позволяет мне назначить его списку выбора MVC и указать поле dataValue и поле dataText.

SomeMethod(){
    List<{my dynamic type}> ruleObject = GetRuleObject();

    var ruleSelectList = new Web.Mvc.SelectList (ruleObject, "ResponseRoutingRuleId", "RuleName");
}

List<{my dynamic type}> GetRuleObject(){...}

В моем запросе Linq я получаю этот динамический объект, ноне знаю, какой тип возврата указывать в GetRuleObject().

0 голосов
/ 30 ноября 2010

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

...