gpt4 book ai didi

c# - 奇怪的动态数据排序

转载 作者:行者123 更新时间:2023-12-02 16:45:29 25 4
gpt4 key购买 nike

我认为 DynamicData 中的 Sort 不能正常工作。可能是我不明白如何使用它?示例:

using DynamicData;
using DynamicData.Binding;
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive;
using System.Reactive.Linq;

namespace DynamicDataTest
{
public class Element:ReactiveObject
{
string name;
public string Name { get => name; set => this.RaiseAndSetIfChanged(ref name,value); }
int val;
public int Value { get => val; set => this.RaiseAndSetIfChanged(ref val, value); }
}

public class CollectionTest:ReactiveObject
{
public SourceCache<Element, int> source = new SourceCache<Element, int>(e => e.Value);
public ReadOnlyObservableCollection<string> Info;
public void Print()
{
Console.WriteLine("Begin print");
foreach (var obj in Info) Console.WriteLine(obj);
Console.WriteLine("End print");
}
public CollectionTest()
{
source.AddOrUpdate(new Element() { Name = "Hello1", Value = 4 });
source.AddOrUpdate(new Element() { Name = "Hello2", Value = 3 });
var connection = source.Connect().Sort(SortExpressionComparer<Element>.Ascending(e => e.Value));
connection.Transform(t=>t.Name).Bind(out Info).Subscribe();
}
}
class Program
{
static void Main(string[] args)
{
var test = new CollectionTest();
test.Print();
test.source.AddOrUpdate(new Element() { Name = "Hello1", Value = 4 });
test.source.AddOrUpdate(new Element() { Name = "Hello2", Value = 3 });
test.Print();
}
}
}

结果很奇怪:第一个 print show order Hello2 Hello1,但第二个 -- Hello1 Hello2。怎么了?

最佳答案

使用源缓存时,排序仅受绑定(bind)、分页和虚拟化运算符的影响。这是出于性能原因,因为状态存储在没有排序概念的字典中。因此,您应该在绑定(bind)之前立即应用排序。

另一方面,对于源列表,状态存储在一个列表中,该列表由于被索引而理解顺序。在这种情况下,排序可以应用于链中的任何位置。

关于c# - 奇怪的动态数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60631690/

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