gpt4 book ai didi

c# - 通用列表的动态排序标准

转载 作者:行者123 更新时间:2023-11-30 20:14:05 26 4
gpt4 key购买 nike

这样做的目的是避免编写大量的 if() 语句。

这是我当前的代码:

public override List<oAccountSearchResults> SearchForAccounts(oAccountSearchCriteria searchOptions)
{
List<oAccountSearchResults> results = Service.SearchForAccounts(searchOptions);
results.Sort((a1, a2) => a2.AccountNumber.CompareTo(a1.AccountNumber));
return results;
}

我想做的是提供一个参数,告诉我要对哪个字段进行排序。然后动态更新我的排序标准,而无需像这样的一堆 if() 语句:

public override List<oAccountSearchResults> SearchForAccounts(oAccountSearchCriteria searchOptions, string sortCriteria)
{
List<oAccountSearchResults> results = Service.SearchForAccounts(searchOptions);
if (sortCriteria == "AccountNumber")
{
results.Sort((a1, a2) => a2.AccountNumber.CompareTo(a1.AccountNumber));
}
else if (sortCriteria == "FirstName")
{
results.Sort((a1, a2) => a2.FirstName.CompareTo(a1.FirstName));
}
return results;
}

我想在没有大约 30 个 if() 语句用于所有可用的可排序条件的情况下执行此操作。

我们将不胜感激。

用解决方案编辑:

谢谢大家的回复。

大卫,你的方法奏效了,但我认为理查德的回答效果更好一些。

这是我想出的最终解决方案。我在示例和 Richards 实现中使用了 David 的框架:

using System;
using System.Collections.Generic;

namespace SortTest
{
class Program
{
static void Main(string[] args)
{


var results1 = Search(oObject => oObject.Value1);

foreach (oObject o in results1)
{
Console.WriteLine(o.Value1 + ", " + o.Value2);
}
Console.WriteLine(Environment.NewLine);
var results2 = Search(oObject => oObject.Value2);

foreach (oObject o in results2)
{
Console.WriteLine(o.Value1 + ", " + o.Value2);
}


Console.ReadLine();
}

public static List<oObject> Search<T>(Func<oObject, T> keyExtract) where T: IComparable
{
var results = new List<oObject>
{
new oObject {Value1 = "A 1", Value2 = "B 2"},
new oObject {Value1 = "B 1", Value2 = "A 2"}
};

results.Sort((a, b) => keyExtract(a).CompareTo(keyExtract(b)));
return results;
}
}
class oObject
{
public string Value1 { get; set; }
public string Value2 { get; set; }
}
}

最佳答案

如果调用者可以提供一个表达式来提取用于比较的值,您可以在比较函数中调用该委托(delegate):

public override List<oAccountSearchResults> SearchForAccounts<T>(
oAccountSearchCriteria searchOptions,
Func<oAccountSearchResults, T> keyExtract) where T : IComparable {
List<oAccountSearchResults> results = Service.SearchForAccounts(searchOptions);

results.Sort(a,b) => keyExtract(a).CompareTo(keyExtract(b)));
return results;
}

关于c# - 通用列表的动态排序标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/950726/

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