【问题标题】:Sorting on C# arrays using OrderBy使用 OrderBy 对 C# 数组进行排序
【发布时间】:2013-08-28 16:39:59
【问题描述】:

我正在使用 OrderBy 按照帖子 Sort array of items using OrderBy<> 中的建议创建一个新的排序数组。

var sorted = sharepointList.OrderBy(item => item.GetTabOrder()).ToArray();

其中,sharepointList 是包含 int tabOrder 等属性的对象数组 GetTabOrder 是“tabOrder”属性的获取器

但这会引发以下异常。请帮忙

NullReferenceException

对象引用未设置为对象的实例。

提前致谢, 萨加利卡

【问题讨论】:

  • 您的集合为空,或者集合中的项目为空。如果两者都不应该是这种情况,那么您在某处就有错误。如果空值是“允许的”,那么您需要先检查空值。
  • 如果item is null,您想如何订购?第一个还是最后一个?
  • @mservidio GetTabOrder 返回 null 不会导致 null 引用异常。异常是由他在空引用上调用GetTabOrder() 引起的。或者,如果 sharepointList 为 null,则在 null 引用上调用 OrderBy。

标签: c# arrays sorting


【解决方案1】:

问题是您的sharepointList 中有一个空值。如果你这样做了;

  var sorted = sharepointList.Where(x => x != null).OrderBy(item => item.GetTabOrder()).ToArray();

它将阻止异常,但空值将从您的结果中排除。

您的整个列表可能为空,在这种情况下您需要;

     if (sharepointList != null) 
         //order by in here
     else
         //handle error

【讨论】:

    【解决方案2】:

    任一sharepointList为空

    或项目为空

    或 GetTabOrder() 中的某些内容为空

    【讨论】:

      【解决方案3】:

      使用visual studio,你可以将鼠标移到一个变量上方,VS会弹出变量的值(可以帮助你知道什么是null变量)

      【讨论】:

      • 谢谢。问题出在初始化数组时的默认空值。我的数据少于数组长度,并且不知道它们会被初始化为 null。我是 C# 的新手,我的印象是如果数组没有初始化,就会有垃圾值。刚刚得知这将是空值。感谢您的快速回复。
      猜你喜欢
      • 2010-10-11
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多