无法理解为什么在运行时抛出对象引用异常。
有效的代码段:
var activityWebLink = new TaskActivityWebLinks()
{
ActivityId = taskActivity.Id,
WebLinkId = webLink.Id,
};
activityWebLink.Id = _activityWebLinksCtrl.Create(activityWebLink);
不起作用的代码段:
var activityWebLink = _activityWebLinksCtrl.GetByWebLinkId(taskActivity.Id, webLink.Id);
if (activityWebLink == null)
{
// doesn't work without this statement. why!?
//activityWebLink = new TaskActivityWebLinks();
activityWebLink.ActivityId = taskActivity.Id;
activityWebLink.WebLinkId = webLink.Id;
activityWebLink.Id = _activityWebLinksCtrl.Create(activityWebLink);
}
正如人们可以看到的那样(可疑)两个代码片段完全相同,只是第二个代码片段针对重复条目构建得更具防御性。
我可以理解,第一个代码段因new
实例而起作用。在第二个片段GetByWebLinkId
中查询数据库并通过linq SingleOrDefault
方法返回匹配对象或默认(TSource)。
我不明白为什么我无法在第二个代码段中访问任何activityWebLink
媒体资源ActivityId
或WebLinkId
。
在有人提到之前,我已经尝试明确说明了返回类型:
TaskActivityWebLinks activityWebLink = _activityWebLinksCtrl.GetByWebLinkId(taskActivity.Id, webLink.Id);
没有变化。
只是为了进一步混淆事情,就在这个没有工作的代码之前,我以完全相同的方式得到/创建WebLink
对象,并且没有运行时异常。
var webLink = _webLinkCtrl.GetByURL(file.Link);
if (webLink == null)
{
// don't need to use this statement. why!?
//webLink = new WebLink();
webLink.Alias = file.Name;
webLink.URL = file.Link;
webLink.CreatedByUserID = UserID;
webLink.CreatedOnDate = DateTime.Now;
webLink.LastModifiedByUserID = UserID;
webLink.LastModifiedOnDate = DateTime.Now;
webLink.Id = _webLinkCtrl.Create(webLink);
}
好的,一位敏锐的读者可能会注意到我的问题的解决方案是作为评论提供的。
我想知道的是weblink
代码段在其new
循环中没有if
语句且activityWebLin
实际上需要new
语句才能正常运行的原因?或者我只是在初始实施中偷工减料,new
语句是强制性的,应该始终使用。
如果有人知道为什么我会在这种情况下继续获得对象引用异常,请用你的智慧打击我。