LINQPad - 在渲染IEnumerable <myobject>?</myobject>时控制列顺序

时间:2013-04-24 00:26:52

标签: linqpad

我编写了一个返回IEnumerable<Item>的查询,其中Item类有几个不同的成员:

public class Item
{
    public string Name { get; private set; }
    public string Type { get; private set; }

    public IEnumerable<Property> Properties;
    public IEnumerable<Item> Items;

    public Item(XElement itemElement)
    {
        Name = itemElement.Attribute("name").Value;
        Type = itemElement.Attribute("type").Value;
        Properties = from property in itemElement.Elements("Property")
                     select new Property(property);

        Items = from item in itemElement.Elements("Item")
                select new Item(item);
    }
}

我不喜欢LINQPad选择将Item属性分配给结果表中的列的顺序。我希望列以NameTypePropertiesItems的顺序显示,但LINQPad默认显示为PropertiesItemsNameType。有没有办法提示LINQPad属性列应该是什么顺序?

2 个答案:

答案 0 :(得分:7)

  

我还是想知道   有一种方法可以覆盖LINQPad Dump()列顺序   我不控制声明顺序的情况   IEnumerable<FooObject>

如果您可以更改Item类,可以通过实现ICustomMemberProvider来实现此目的(参见http://www.linqpad.net/FAQ.aspx#extensibility

例如

public class Item : LINQPad.ICustomMemberProvider
{

    ...

    IEnumerable<string> ICustomMemberProvider.GetNames() 
    {
        return new [] { "Name", "Type", "Properties", "Items" };
    }

    IEnumerable<Type> ICustomMemberProvider.GetTypes ()
    {
        return new [] { typeof (string),  typeof(string) , typeof(IEnumerable<Item>), typeof(IEnumerable<Property>) };
    }

    IEnumerable<object> ICustomMemberProvider.GetValues ()
    {
        return new object [] { this.Name, this.Type, this.Properties, this.Items };
    }                           
}

答案 1 :(得分:0)

问题中描述的LINQPad排序顺序正在发生,因为Name和Type是C#对象属性,但Properties成员和Items成员实际上是C#对象字段。

默认情况下,LINQPad似乎在属性之前显示对象字段。

我将自动实现的属性添加到Properties成员和Items成员:

    public string Name { get; private set; }
    public string Type { get; private set; }
    public IEnumerable<Property> Properties { get; private set; }
    public IEnumerable<Item> Items { get; private set; }

进行此更改后,LINQPad列顺序与类中的成员声明顺序相匹配,这是我最初想要的。

但是,我会在这里留下这个问题而不接受我自己的答案,因为我仍然想知道在我无法控制的情况下是否有办法覆盖LINQPad Dump()列顺序IEnumerable<FooObject>的声明顺序。