我使用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))
是对的吗?有什么区别吗?
答案 0 :(得分:1)
这两种方法在功能上都是等效的。
.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
创建一个已经包含检查的枚举器。所以你的foreach
只会迭代条件所适用的元素。在另一个示例中,您使用if
语句显式执行此操作。