2010-11-30 5 views
3

Je souhaite appeler une méthode qui renvoie un type anonyme. J'ai besoin de savoir quel est le Type de ce type anonyme parce que je le retourne dans une méthode. Est-ce qu'on l'appelle "dynamique"? Lorsque je débogue, la fenêtre de surveillance indique que le type est <> f__AnonymousType0.Linq ToDictionary renvoie un type anonyme

Voici mon code:

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

Répondre

0

Il est un objet. Si vous avez besoin de taper fort, ne le rendez pas anonyme.

3

Eh bien, vous semblez retourner un Dictionary<int, string>. Le type des valeurs de dict n'est pas un type anonyme; c'est un vieux plaine string. En fait, il ne semble pas y avoir besoin de types anonymes oudynamic ici. Etes-vous sûr que ce n'est pas ce que vous voulez vraiment?

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

Si non, veuillez nous faire savoir pourquoi.

Si vous vraiment voulez coller avec dynamic, vous pourriez des acteurs de cours, selon le cas:

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

Ce que je veux vraiment faire est de retourner un type dynamique avec 2 propriétés appelées ResponseRoutingRuleId et RuleName. C'est ainsi que je peux l'assigner à une liste de sélection MVC et spécifier le champ dataValue et le champ dataText.

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

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

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

Dans ma requête Linq, je reçois cet objet dynamique, mais je ne sais pas ce type de retour pour spécifier dans GetRuleObject().

Questions connexes