我在委托未授权问题上...
我有一个名为Tweet的对象,该对象具有字符串文本和int分数。我想按分数顺序对tweet对象数组(twtArray)进行排序。
这是我的代码:

Array.Sort(twtArray, delegate(Tweet twt1, Tweet twt2)
        {
            return twt1.score.CompareTo(twt2.score); //(twt1.score - twt2.score)
        });


它抛出:


  System.NullReferenceException:对象引用未设置为对象的实例。
          在System.Array.FunctorComparer`1.Compare(T x,T y)处


在调试的同时,我注意到第一个比较有效,但是在第二个比较中,twt2为空。而且它不能为null,因为我在数组中肯定有8个元素。
我也尝试过反转twt1twt2,但没有区别。
我还尝试在Tweet类中创建自己的比较方法,但同样,也是。
任何帮助,将不胜感激!

另外,我不认为这是此问题的重复:List.Sort in C#: comparer being called with null object
因为我从中尝试了所有可能的解决方案,但是没有用。我也在Google上搜索了很多:(

最佳答案

即使您的Tweet[]具有8个元素,有些也可以是null

Tweet[] twtArray = new Tweet[8]; // all instances are null

您:Tweet []的大小为20,我可以在代码的第一行看到其中有8个Tweet对象(具有正确的文本和得分值)。

那么数组的大小是20,但是只有8个被初始化? (往上看)
Array.Sort需要将所有其他内容进行比较。

您可以通过以下方式防止它:

Array.Sort(twtArray, delegate(Tweet twt1, Tweet twt2)
{
    if(twt1 == null && twt2 == null) return 0;
    if(twt1 == null) return -1;
    if(twt2 == null) return  1;
    return twt1.score.CompareTo(twt2.score);
});

关于c# - 数组比较(T)委托(delegate)NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24909992/

10-12 17:53