【发布时间】:2016-10-31 21:17:14
【问题描述】:
我收到此错误:
“索引超出了数组的范围。”
通过使用此 LINQ 查询
我想,如果 A.LogOutTime 返回 null 然后显示“未知”。
var listItems = (from A in data orderby A.FirstName
select new {
Action = "Logout",
UserName = A.FirstName + " " + A.SurName,
ID = A.Id,
AccessDate = (A.LogOutTime ?? "Unknown")
.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0],
AccessTimeFrame = (A.LogOutTime ?? "Unknown")
.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[1]
+ " " + (A.LogOutTime ?? "Unknown")
.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[2],
Comment = "Never delete this Archive"
}).Distinct();
我该如何解决这个问题?
【问题讨论】:
-
这与 LINQ 无关。检查您的数组,您在某些地方使用了错误的索引。也许,试图访问一个空数组上的项目?
-
将其拆分为更易于管理的内容?乍一看,你有很多索引到数组中,这些索引不能保证有那么多项目(例如,如果为 null,你设置为“未知”,当拆分时,它将只有一个项目 - 尝试获取项目1 或 2 将因此异常而失败)。
-
如果你在空间上拆分“Unkown”,你将得到一个只有一个值的数组。
-
还有为什么
LogOutTime是string而不是DateTime? -
@AbhilashJA 不要。这是一个严重的错误。另存为
datetime。即使您不想修复该错误,也可以解析日期字符串而不是拆分。您可以使用DateTime.Date和DateTime.TimeOfDay检索DateTime的日期和时间部分