我在委托未授权问题上...
我有一个名为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个元素。我也尝试过反转
twt1
和twt2
,但没有区别。我还尝试在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/