首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kinect NullReferenceException错误

Kinect NullReferenceException错误
EN

Stack Overflow用户
提问于 2011-11-30 06:49:12
回答 2查看 581关注 0票数 2
代码语言:javascript
复制
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的错误。

EN

回答 2

Stack Overflow用户

发布于 2011-11-30 06:51:42

如果没有与您的where子句匹配的值,FirstOrDefault()将返回null (假设SkeletonData是一个类)-所以我怀疑情况就是这样。

如果您的代码将依赖于至少有一个结果,那么调用First()比调用FirstOrDefault更好,以避免隐藏错误。我个人也不会费心使用查询表达式:

代码语言:javascript
复制
SkeletonData data = skeletonSet.Skeletons
               .Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
               .First();

或者,正如注释中所指出的,使用带有谓词的First重载:

代码语言:javascript
复制
SkeletonData data = skeletonSet.Skeletons
               .First(s => s.TrackingState == SkeletonTrackingState.Tracked);
票数 3
EN

Stack Overflow用户

发布于 2011-11-30 06:52:15

您的数据变量可能为空。在该行上设置断点,并在“本地监视”窗口中查看它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8318864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档