我有一个如下所示的类定义:
public class MyObjectModel
{
public int ObjectID { get; set; }
//for when the user's data is split in 2 fields
public string FirstName { get; set; }
public string LastName { get; set; }
//for when the user's data is all in one field
public string FirstLastName { get; set; }
}
我有这些 MyObjectModel
的列表,我想使用自定义排序过程按名称对它们进行排序,因为这涉及检查数据是否包含 LastName
(在此case sort using the LastName
) 或者只是FirstLastName
(在这种情况下,我将打破字符串并在第二项上排序,如果有的话,或者只是整个如果只有一个单词,则为字符串。)
我不确定两件事:
- 我应该使用
IComparer
还是IComparable
? - 一旦它确定了排序顺序(我可以做到),我该怎么做才能使该方法的输出是一个表示
ObjectID
的整数列表。
最佳答案
使用 Linq:
List<MyObjectModel> objects = new List<MyObjectModel>();
List<int> ids = objects.OrderBy(o => FunctionWhichReturnsNameForSort(o)).Select(o => o.ObjectID).ToList();
FunctionWhichReturnsNameForSort
可以在另一个类、扩展或作为成员中实现。
// should be in a static helper class
public static string NameForSort(this MyObjectModel obj)
{
if (!string.IsNullOrEmpty(obj.LastName)) return obj.LastName;
return obj.FirstLastName.Split(... // your splitting logic goes here
}
var ids = objects.OrderBy(o => o.NameForSort()).Select(o => o.ObjectID).ToList();
关于c# - 比较对象和返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712445/