gpt4 book ai didi

c# - 如何在不更改其类型的情况下订购 IGrouping?

转载 作者:行者123 更新时间:2023-11-30 13:30:37 24 4
gpt4 key购买 nike

我有一个 IGrouping 类型的对象,想在不更改对象类型的情况下对组内的元素进行排序。
换句话说,我有

var tmp = group.OrderBy(x => x);

group类型 IGrouping<int, someanonymousclass>我想要 tmp类型为 IGrouping<int, someanonymousclass>

一种解决方法是将其更改为字典或新的匿名类,但我希望 tmp 的类型明确为 IGrouping<int, someanonymousclass> .

换句话说:我想对 IGrouping<int, someanonymousclass> 的元素进行排序目的。如果我使用 OrderBy它改变了 group 的类型至 IOrderedEnumerable我无法访问 group.Key了。我怎样才能维持 group 的类型?

示例:

var states = SimulationPanel.innerPanel.Children.OfType<StateBar>().Where(x => x.isSensorState())
.GroupBy(x => (SensorElement)x.BauplanElement,
x => new
{
Start = (decimal)(x.Margin.Left / SimulationPanel.Zoom),
Width = (decimal)(x.Width / SimulationPanel.Zoom),
State = x.State
});

var group = states.First();
var tmp = group.OrderBy(x => x.Start);
var key = tmp.Key; //This does not work, because tmp is not of type IGrouping

我知道我可以使用 OrderBy分组前。不过,我不想那样做。

最佳答案

如果您可以,请提前下单,例如

var states = SimulationPanel.innerPanel
.Children
.OfType<StateBar>()
.Where(x => x.isSensorState())
.OrderBy(x => (decimal)(x.Margin.Left / SimulationPanel.Zoom))
.GroupBy(...);

(或者在 Select 之前放一个 OrderBy 并使 GroupBy 更简单。)

如果你真的需要这个,你可以自己写 IGrouping<TKey, TElement>对元素进行排序并将它们保留在列表中的实现和扩展方法:

public static class GroupExtensions
{
public static IGrouping<TKey, TElement> OrderGroupingBy<TKey, TElement, TOrderKey>
(this IGrouping<TKey, TElement> grouping,
Func<TElement, TOrderKey> orderKeySelector)
{
return new GroupingImpl<TKey, TElement>
(grouping.Key, grouping.OrderBy(orderKeySelector));
}

private class GroupingImpl<TKey, TElement> : IGrouping<TKey, TElement>
{
private readonly TKey key;
private readonly List<TElement> elements;

internal GroupingImpl(TKey key, IEnumerable<TElement> elements)
{
this.key = key;
this.elements = elements.ToList();
}

public TKey Key { get { return key; } }

public IEnumerator<TElement> GetEnumerator()
{
return elements.GetEnumerator();
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}

关于c# - 如何在不更改其类型的情况下订购 IGrouping?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com