【发布时间】:2022-01-23 09:36:48
【问题描述】:
我正在开发一个可以修改输入负载属性的函数。有效负载包含节点,每个节点都包含特征列表。我需要删除一些特定的功能匹配条件,并修改每个节点窗口属性的开始和结束时间。我已经使用传统的嵌套 for 循环编写了该函数,但很难将其转换为 Linq 函数。有人知道如何将此嵌套的 for 循环函数转换为 Linq 函数吗?
private void ApplyTransformation(InputPayload payload, int startTime = 8, int endTime = 15)
{
var nodes = payload.Nodes;
for (var i = 0; i < nodes.Count(); ++i)
{
var node = nodes[i];
var features = node.Features;
for (var j = 0; j < features.Count(); ++j)
{
var feature = features[j];
if (feature.NodeFeatureTypeID
== FeatureTypeEnum.FEATURE_A
|| feature.FeatureTypeID == FeatureTypeEnum.FEATURE_B
|| feature.FeatureTypeID == FeatureTypeEnum.FEATURE_C
|| feature.FeatureTypeID == FeatureTypeEnum.FEATURE_D
)
{
features.RemoveAt(j);
}
}
var windows = node.Windows;
for (var k = 0; k < windows.Count(); ++k)
{
var window = windows[k];
if (window.NodeFunctionTypeID == FeatureTypeEnum.MM_HOURS) continue;
window.StartHour = new TimeSpan(startTime, 0, 0);
window.EndHour = new TimeSpan(endTime, 0, 0);
}
}
}
【问题讨论】:
-
LINQ 在您将数据结构视为不可变时工作得更好,因此请考虑使用
Where()过滤列表删除元素并使用Select()将元素转换为新元素,而不是删除和添加.然后用转换后的版本替换原始列表。