我编写了一个返回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
属性分配给结果表中的列的顺序。我希望列以Name
,Type
,Properties
,Items
的顺序显示,但LINQPad默认显示为Properties
,Items
,Name
,Type
。有没有办法提示LINQPad属性列应该是什么顺序?
答案 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>
的声明顺序。