【问题标题】:Sorting by age a list class in c#c#中按年龄排序列表类
【发布时间】:2015-01-17 01:31:08
【问题描述】:

我是初学者,我想创建一个打印的实现 所有用户信息到控制台,按年龄排序。我尝试使用 Linq,但没有成功。 这是代码库:

class User
{
    public String name;
    public String surname;
    public int age;
}

interface UsersConsumer { public void consume(List<Users> collection); }

这是我在界面中尝试做的:

List<User> SortedUserList = 
    collection.OrderByDescending(collection => collection.age).ToList();

【问题讨论】:

  • 错误是什么?你有一个接口,所以我假设你有另一个实现该接口的类,这就是你放置代码 sn-p 的地方?
  • 您将 lambda 表达式的参数命名为 collection,尽管已经有一个名为 collection 的变量(列表本身)。你试过collection.OrderByDescending(c =&gt; c.age).ToList();吗?你得到什么错误?
  • 是的,抱歉,错误是“一个名为 collection' cannot be declared in this scope because it would give a different meaning to collection 的局部变量,它已在‘父级或当前’范围内用于表示其他内容”

标签: c# linq list class sorting


【解决方案1】:

您需要在 lambda 表达式中使用不同的变量名称,例如:

List<User> SortedUserList = collection.OrderByDescending(row => row.age).ToList();

否则会出现如下错误:

不能在此范围内声明名为“collection”的局部变量 因为它会给“收藏”赋予不同的含义,即 已在“父级或当前”范围内用于表示其他内容

编辑:刚刚注意到一件事:

这是我在界面中尝试做的:

您的界面中不能有实现。接口更像是一种契约,你必须在一个类中实现你的接口,然后把实现像这样:

public class SomeClass : UsersConsumer 
{
    public void consume(List<User> collection)
    {
        List<User> SortedUserList = collection.OrderByDescending(row => row.age).ToList();
    }
}   

请确保您关注.Net naming conventions

【讨论】:

    【解决方案2】:

    你不能排序,因为程序不知道如何排序。写信
    class User : IComparable&lt;User&gt;
    现在程序知道用户可以与另一个用户进行比较。现在写 HOW:

    public int CompareTo(User u) { return age.CompareTo(u.age); }

    现在程序知道,您可以按年龄对用户进行排序。所以你可以对它们进行排序collection.Sort() 并写下它们:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多