在某些情况下,我正在交换List Object中的值并更新List Object值。
当前,我正在做的是 -通过列表循环遍历每个对象 -检查条件是否为净 -交换值
buffer1
我可以采用更好的方法吗?我了解PropertyInfo,即可以检查属性名称和获取值等,但是没有任何提示可以完成此操作。
谢谢
答案 0 :(得分:0)
这不完全是您要的,但是您可以在Where
语句中合并这些子句,然后在主体中包含一些if
语句:
public static void SwapMinMaxIfNull(this IEnumerable<RiskBoardDataToExport> rows,
string reportfor)
{
if (rows = null) return;
if (reportfor.Equals("Comparison", StringComparison.OrdinalIgnoreCase))
{
foreach (var row in rows.Where(r =>
(r.MinGaitSpeed == null && r.MaxGaitSpeed != null) ||
(r.MinBergScoreSpeed == null && r.MaxBergScoreSpeed != null) ||
(r.MinBergScoreSpeed == null && r.MaxBergScoreSpeed != null)))
{
if (row.MinGaitSpeed == null)
{
row.MinGaitSpeed = row.MaxGaitSpeed;
row.MaxGaitSpeed = null;
}
if (row.MinTUGTime == null)
{
row.MinTUGTime = row.MaxTUGTime;
row.MaxTUGTime = null;
}
if (row.MinBergScoreSpeed == null)
{
row.MinBergScoreSpeed = row.MaxBergScoreSpeed;
row.MaxBergScoreSpeed = null;
}
}
}
}
答案 1 :(得分:0)
由于此操作对列表中项目的顺序无关紧要,因此可以通过并行化轻松地加快此速度(您可以阅读该here)。
因此,您应该做的是并行处理此foreach循环,并将其与Rufus L的优化代码结合使用,以取得最快的结果。
var rows = rows.Where(r =>
(r.MinGaitSpeed == null && r.MaxGaitSpeed != null) ||
(r.MinBergScoreSpeed == null && r.MaxBergScoreSpeed != null) ||
(r.MinBergScoreSpeed == null && r.MaxBergScoreSpeed != null))
Parallel.ForEach(rows, (row) => {
{
if (row.MinGaitSpeed == null)
{
row.MinGaitSpeed = row.MaxGaitSpeed;
row.MaxGaitSpeed = null;
}
if (row.MinTUGTime == null)
{
row.MinTUGTime = row.MaxTUGTime;
row.MaxTUGTime = null;
}
if (row.MinBergScoreSpeed == null)
{
row.MinBergScoreSpeed = row.MaxBergScoreSpeed;
row.MaxBergScoreSpeed = null;
}
}
请注意,这需要System.Threading.Tasks命名空间,即Parallel
类所在的位置。