1

我使用 kinect SDK 在 C# 中开发应用程序。现在我对跟踪骨架有疑问。

我有 2 个代码,但有 2 种不同的方法。我想知道这两种方法会导致相同的概念吗?还是不同?

代码 1:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame frame = e.OpenSkeletonFrame())
    {
       m_skeletons = new Skeleton[frame.SkeletonArrayLength];
       frame.CopySkeletonDataTo(m_skeletons);
    } 

     if(m_skeletons != null && m_skeletons.Length != 0)
     { 
         foreach (Skeleton skeleton in m_skeletons)
         {
            if (skeleton != null && skeleton.TrackingState == SkeletonTrackingState.Tracked)
            {
                //doing some operations 
            }


          }

      }

}

现在另一种跟踪方法,如:代码 2:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame frame = e.OpenSkeletonFrame())
    {
       m_skeletons = new Skeleton[frame.SkeletonArrayLength];
       frame.CopySkeletonDataTo(m_skeletons);
    } 

     if(m_skeletons != null && m_skeletons.Length != 0)
     { 
         foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked))
          {

               //doing some operations 
          }

      }

}

既是foreach (Skeleton skeleton in m_skeletons)又是

foreach (Skeleton skeleton in m_skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked))

是正确的 ?有什么区别吗?

4

1 回答 1

1

这两种方法在功能上是等效的。

.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)创建一个已经包含检查的枚举器。所以你foreach只会迭代条件成立的元素。在另一个示例中,您使用if语句显式执行此操作。

于 2016-07-16T08:26:56.623 回答