2010-11-30 135 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()指定。