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もう 1 つの例では、これをステートメントで明示的に行います。

于 2016-07-16T08:26:56.623 に答える