如何在其范围之外访问匿名对象的属性?

时间:2012-11-29 17:31:19

标签: c# linq anonymous-types var

范围可能不是正确的词。使用以下代码,我无法访问集合元素的对象属性。是否有更好的返回数据类型或访问这些属性的方法?

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
}

4 个答案:

答案 0 :(得分:5)

有两种可行的解决方案:

  1. 为它创建一个真正的类。这是首选的解决方案。
  2. 让您的方法返回dynamic而不是object。这样做的问题是您将丢失使用此方法结果的代码的编译时检查。

答案 1 :(得分:1)

一旦离开定义了匿名类型的范围,就必须使用反射来获取其成员。

我能想到的另外两个选项是使用动态类型(如果使用4.0框架或更高版本)或创建定义类型而不是匿名类型。

答案 2 :(得分:1)

我建议只创建一个用于传递数据的新类型。如果数据范围受到保护,您可以使用受保护的嵌套子类来防止小数据类过度扩散。

答案 3 :(得分:0)

请改用IEnumerable<dynamic>

根据msdn“动态类型允许它发生的操作绕过编译时类型检查。而是在运行时解析这些操作。动态类型简化了对COM API的访问,例如Office Automation API,还有动态API,如IronPython库,以及HTML文档对象模型(DOM)。“

http://msdn.microsoft.com/en-us/library/dd264741.aspx