Оба метода отслеживания скелетов верны в kinect?

Я использую kinect SDK для разработки приложения на С#. Теперь у меня есть сомнения по отслеживанию скелета.

У меня есть 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))

верны? Есть ли разница?


person user2986042    schedule 16.07.2016    source источник


Ответы (1)


Оба подхода функционально эквивалентны.

.Where(s => s.TrackingState == SkeletonTrackingState.Tracked) создает перечислитель, который уже включает проверку. Таким образом, ваш foreach будет перебирать только те элементы, для которых выполняется условие. В другом примере вы делаете это явно с помощью инструкции if.

person Nico Schertler    schedule 16.07.2016