void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
SkeletonFrame skeletonSet = e.SkeletonFrame;
SkeletonData data = (from s in skeletonSet.Skeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
var head = data.Joints[JointID.Head];
var rightHand = data.Joints[JointID.HandRight];
var leftHand = data.Joints[JointID.HandLeft];
SetEllipsePosition(ellipseHead, head, false);
SetEllipsePosition(ellipseLeftHand, leftHand, isBackGestureActive);
SetEllipsePosition(ellipseRightHand, rightHand, isForwardGestureActive);
ProcessForwardBackGesture(head, rightHand, leftHand);
}行var head = data.Joints[JointsID.Head];给出了一个类型为NullReferenceException的错误。
发布于 2011-11-30 06:51:42
如果没有与您的where子句匹配的值,FirstOrDefault()将返回null (假设SkeletonData是一个类)-所以我怀疑情况就是这样。
如果您的代码将依赖于至少有一个结果,那么调用First()比调用FirstOrDefault更好,以避免隐藏错误。我个人也不会费心使用查询表达式:
SkeletonData data = skeletonSet.Skeletons
.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
.First();或者,正如注释中所指出的,使用带有谓词的First重载:
SkeletonData data = skeletonSet.Skeletons
.First(s => s.TrackingState == SkeletonTrackingState.Tracked);发布于 2011-11-30 06:52:15
您的数据变量可能为空。在该行上设置断点,并在“本地监视”窗口中查看它。
https://stackoverflow.com/questions/8318864
复制相似问题