您好我正在尝试使用Linq orderby命令根据给定字段的值对对象数组进行排序。
这是我的代码:
LogDataPopulator[] arrLogPopulators = new LogDataPopulator[logCounter];
int counter = 0;
foreach (DateTime d in dtTimeVal)
{
arrLogPopulators[counter] = new LogDataPopulator();
arrLogPopulators[counter].messageDateTime = dtTimeVal[counter];
arrLogPopulators[counter].messageContent = contentVal[counter];
arrLogPopulators[counter].messagelevel = levelVal[counter];
arrLogPopulators[counter].messagepublisher = publisherVal[counter];
counter++;
}
LogDataPopulator[] sorted = new LogDataPopulator[logCounter];
sorted = arrLogPopulators.OrderBy(item => item.messageDateTime).ToArray();
但是我得到一个空引用异常错误
System.NullReferenceException未处理
Message =对象引用未设置为对象的实例 源= McLogViewer
知道我应该如何使用OrderBy
条款以及我做错了什么?
非常感谢任何帮助。此外,我可以通过将对象数组转换为字典来对对象数组进行排序,但这不符合我的目的,因为我试图在绑定到LogDataPopulator
类的窗体格式视图中显示内容。
答案 0 :(得分:1)
确保dtTimeVal
的长度等于arrLogPopulators
的长度。否则,您最终将会遇到未初始化的arrLogPopulators
成员,当您尝试对其messageDateTime
属性进行排序时,该成员将抛出NullReferenceException。
答案 1 :(得分:0)
它应该适用于这样的事情:
var sorted = (from d in dtTimeVal
let arrLogPopulator = new LogDataPopulator(dtTimeVal[counter], contentVal[counter],
levelVal[counter], publisherVal[counter])
orderby arrLogPopulator.messageDateTime
select arrLogPopulator).ToArray()
使用LogDataPopulator类中的构造函数:
public LogDataPopulator(//some arguments...)
{
this.messageDateTime = //arg1;
this.messageContent = //arg2;
this.messagelevel = //arg3;
this.messagepublisher = //arg4;
//others arguments...
}