【问题标题】:Linq ToDictionary returns an anonymous typeLinq ToDictionary 返回一个匿名类型
【发布时间】:2012-08-15 02:26:32
【问题描述】:

我想调用一个返回匿名类型的方法。我需要知道这个匿名类型的 Type 是什么,因为我在一个方法中返回它。它被称为“动态”吗?当我调试时,监视窗口显示类型是 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; }
    ...
}

【问题讨论】:

    标签: linq dynamic anonymous-types


    【解决方案1】:

    好吧,您实际上似乎返回了Dictionary&lt;int, string&gt;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);    
    }
    

    【讨论】:

      【解决方案2】:

      这是一个对象。如果您需要强类型,请不要匿名。

      【讨论】:

        【解决方案3】:

        我真正想做的是返回一个具有两个属性的动态类型,称为ResponseRoutingRuleIdRuleName。这样我就可以将它分配给 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() 中指定什么返回类型。

        【讨论】:

          猜你喜欢
          • 2017-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-21
          • 1970-01-01
          相关资源
          最近更新 更多