范围可能不是正确的词。使用以下代码,我无法访问集合元素的对象属性。是否有更好的返回数据类型或访问这些属性的方法?
protected object Modules()
{
DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/"));
var folders = from x in di.GetDirectories()
where
!(new string[] {
"app_data","bin","obj","scripts","styles","properties"
}).Contains<string>(x.Name.ToLower())
select new
{
Name = x.Name,
Path = x.FullName
};
return folders
}
答案 0 :(得分:5)
有两种可行的解决方案:
dynamic
而不是object
。这样做的问题是您将丢失使用此方法结果的代码的编译时检查。答案 1 :(得分:1)
一旦离开定义了匿名类型的范围,就必须使用反射来获取其成员。
我能想到的另外两个选项是使用动态类型(如果使用4.0框架或更高版本)或创建定义类型而不是匿名类型。
答案 2 :(得分:1)
我建议只创建一个用于传递数据的新类型。如果数据范围受到保护,您可以使用受保护的嵌套子类来防止小数据类过度扩散。
答案 3 :(得分:0)
请改用IEnumerable<dynamic>
。
根据msdn“动态类型允许它发生的操作绕过编译时类型检查。而是在运行时解析这些操作。动态类型简化了对COM API的访问,例如Office Automation API,还有动态API,如IronPython库,以及HTML文档对象模型(DOM)。“