我想调用一个返回匿名类型的方法。我需要知道这个匿名类型的类型是什么,因为我在一个方法中返回它。它被称为“动态”吗?当我调试时,监视窗口显示类型是<> 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; }
...
}
答案 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);
}
答案 1 :(得分:0)
这是一个对象。如果您需要强力打字,请不要匿名。
答案 2 :(得分:0)
我真正想做的是返回一个包含2个名为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()
中要指定的返回类型。