首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型排序

泛型排序
EN

Stack Overflow用户
提问于 2012-08-28 01:01:18
回答 4查看 192关注 0票数 0

我有许多实体,并且我想编写一些通用的排序类,它可以为我提供给定对象和属性的排序列表。例如:

代码语言:javascript
复制
Class Country
{
      public int id { get; set; }
      public string CountryName { get; set; }
}

现在,我应该能够将未排序的列表和应该排序的属性名一起传递给我的排序程序类。到现在为止,我已经打败了自己很长一段时间,现在卡住了。任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

发布于 2012-08-28 03:43:34

通过使用.NET LINQ扩展方法,或者更具体地说,使用Dynamic LINQ节,可以很容易地实现按属性名称排序。看看Scott Gu写的关于它是如何工作的Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)。本质上,您的排序类只需是LINQ扩展OrderByOrderByDescending的花哨包装器。

下面是一个例子:

代码语言:javascript
复制
var sortedCountries = listOfCountries.OrderBy("CountryName");

或者,如果您熟悉泛型,可以编写一个接受集合的包装器和一个用于选择属性值的Func<TSource, TKey>,如下所示:

代码语言:javascript
复制
public class MySorterClass
{
    public IEnumerable<TSource> OrderList<TSource, TKey>(IEnumerable<TSource> list, Func<TSource, TKey> selector)
    {
        return list.OrderBy(selector);
    }

    public IEnumerable<TSource> OrderList<TSource>(IEnumerable<TSource> list, string propertyName)
    {
        return list.OrderBy(propertyName);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-08-28 01:06:11

如果您使用的是Java,请看一下Collections.Sort(...)。有两个版本,我认为一个是使用元素的自然顺序对它们进行排序(看看Compareable接口),另一个是Comparator。这两个都应该行得通。除此之外,我相信其他语言也有非常相似的东西。

票数 0
EN

Stack Overflow用户

发布于 2012-08-28 01:07:31

解决方法:

你没有提到一门语言。在c#中,您可以让您的类实现接口IComparable并添加CompareTo函数,该函数接受两个参数并返回较大的一个,或者使用匿名函数执行相同的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12146248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档