这样做的目的是避免编写大量的 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() 语句来实现所有可用的可排序条件的情况下执行此操作。
任何和所有的帮助将不胜感激。
编辑解决方案:
谢谢大家的回复。
大卫,你的方法有效,但我认为理查德的回答效果更好一些。
这是我想出的最终解决方案。我使用 David 的框架作为示例,并使用 Richards 实现:
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; }
}
}