【发布时间】:2019-10-08 12:23:24
【问题描述】:
我在某些条件下交换列表对象中的值并更新列表对象值。
目前,我正在做的是 - 通过列表循环每个对象 - 检查条件是否为净 - 交换值
public static void SwapMinMaxIfNull<T>(this IEnumerable<T> rows, string reportfor)
{
if (reportfor.Equals("Comparison"))
{
var row = rows as IEnumerable<RiskBoardDataToExport>;
try
{
if (rows.Any())
{
var Tests = row.Where(min => min.MinGaitSpeed == null && min.MaxGaitSpeed != null).ToList();
if (Tests != null)
{
foreach (RiskBoardDataToExport test in Tests)
{
test.MinGaitSpeed = test.MaxGaitSpeed;
test.MaxGaitSpeed = null;
}
}
// again check for next object
Tests = row.Where(min => min.MinTUGTime == null && min.MaxTUGTime != null).ToList();
if (Tests != null)
{
foreach (RiskBoardDataToExport test in Tests)
{
test.MinTUGTime = test.MaxTUGTime;
test.MaxTUGTime = null;
}
}
// again check for next object
Tests = row.Where(min => min.MinBergScoreSpeed == null && min.MaxBergScoreSpeed != null).ToList();
if (Tests != null)
{
foreach (RiskBoardDataToExport test in Tests)
{
test.MinBergScoreSpeed = test.MaxBergScoreSpeed;
test.MaxBergScoreSpeed = null;
}
}
//.. for brevity
}
}
}
我能以更好的方式做到这一点吗?我知道 PropertyInfo 即可以检查属性名称并获取值等,但是没有任何提示可以完成此操作。
谢谢
【问题讨论】:
-
首先,您不必对您的 Lambada 表达式执行
.ToList()。如果我理解正确,您想更新符合特定条件的对象的属性值吗?如果这是您想要的,那么可能想看看this 或者我错过了什么? -
你做一个泛型,在方法内部你做一个特定类型的转换,考虑给泛型添加一个限制,这样你的方法只能用这些类型调用
-
是的,如果
T始终是RiskBoardDataToExport,则使用它来代替。 -
@CoderofCode 我需要 where 子句是动态的,即只给出源和目标并实现我想要的。但是,仍然没有任何线索。我只想一次又一次地摆脱foreach
-
另外,
Where不会返回null值,因此您可以摆脱所有if (Tests != null)块。
标签: c# .net list object dynamic