2010-11-30 134 views
3

我想调用一个返回匿名类型的方法。我需要知道这个匿名类型的类型是什么,因为我在方法中返回它。它被称为“动态”吗?当我调试时,监视窗口显示类型为<> f__AnonymousType0。Linq ToDictionary返回一个匿名类型

这里是我的代码:

// 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; } 
    ... 
} 

回答

0

它是一个对象。如果您需要强大的打字功能,请不要匿名。

3

那么,你实际上似乎正在返回一个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

我真正想要做的是返回一个动态类型有2个属性称为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()指定。