【问题标题】:Sort the list of strings after string data was added to the list and add method returns void将字符串数据添加到列表后对字符串列表进行排序,add 方法返回 void
【发布时间】:2018-01-12 18:41:41
【问题描述】:

我在这里看到了一些类似的问题,大多数答案都显示了我所做的,但是它对我的情况没有帮助。

这就是我所拥有的:

我有一些日期要添加到字符串列表中。

List<string> DateList { get; set; }

DateList = new List<string>();
DateList.AddRange(CashDataList.Select(d => d.RequestedDate.ToLongDateString()).Distinct().ToList());

DateList.AddRange(CheckDataList.Select(d => d.RequestedDate.ToLongDateString()).Distinct().ToList());

DateList.AddRange(CryptDataList.Select(d => d.RequestedDate.ToLongDateString()).Distinct().ToList());

将所有日期添加到我的list 后,我选择唯一日期:

DateList = DateList.Distinct().ToList();

现在,我有 List&lt;string&gt;,其中包含我需要在我的 UI 上按ascending 顺序显示的所有日期。

为此,我想修改我的逻辑以对我的list 进行排序:

DateList = DateList.Sort();

但是,我收到的警告告诉我

"不能将类型 void 隐式转换为 System.Collection.Generic.List"

我做了一些研究,发现AddRange 方法返回void,这就是为什么我有这样的警告。

解决我的问题的正确方法是什么?

【问题讨论】:

    标签: linq sorting generic-list


    【解决方案1】:

    您可以使用 LINQ 对列表进行排序:

    DateList = DateList.OrderBy(q => q);
    

    【讨论】:

    • 我尝试这样做,但没有排序:DateList = DateList.Distinct().OrderBy(q =&gt; q).ToList()
    • Ofc 确实如此。 new List&lt;string&gt; { "B", "C", "A","B" }.Distinct().OrderBy(q =&gt; q).ToList(); 将从列表中选择唯一值并按字母顺序排列它们
    【解决方案2】:

    我找到了问题的解决方案。

    我不得不换成

    List<string> DataList to List<DateTime>
    DateList.AddRange(CashDataList.Select(d => d.RequestedDate).Distinct().ToList());
    

    所以,我的 DateList 将包含我可以排序的 DateTime 对象。我无法对字符串进行排序。

    然后,在我的 UI 逻辑中,我将 DateTime 日期转换为 ToLongDateString 格式。

    这个解决方案效果很好

    【讨论】:

      【解决方案3】:

      您的问题是您没有查找List&lt;&gt;.Sort。如果你有,你会发现它对 List 就地排序,并且没有返回值(即返回 void)。

      所以,而不是

      DateList = DateList.Sort();
      

      你只需要

      DateList.Sort();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-26
        • 1970-01-01
        • 2021-06-10
        • 2018-07-02
        • 2017-09-26
        • 1970-01-01
        相关资源
        最近更新 更多