这可能是一个愚蠢的问题,但我一直使用 linq 来选择项目。
但我想知道是否可以使用其关键字执行以下简单任务。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
您可以使用 List 类的 ForEach 方法。
ordersList.ForEach(oi => oi.TYPE = oi.TYPE == "P" ? "Project" : "Support" );
如果你想拥有 IEnumerable 类型的 ForEach 方法,你可以创建自己的 ForEach 扩展
public static void ForEach<T>(this IEnumerable<T> en, Action<T> action)
{
foreach(T item in en)
{
action(item);
}
}
不,LINQ(语言集成查询)是一种查询语言,它确实在简洁的查询定义方面大放异彩,但在这方面并不总是很好(速度和/或内存问题)。
如果您想修改集合,请保持您已经这样做的方式。
ForEach不是 Linq 解决方案,但它看起来像:
ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");
List<T>
仅在instance 上可用,在IEnumerable<T>
.
LINQ 用于查询集合,为了修改您当前的循环更具可读性和更好的方法,但如果您想要 LINQ 选项,那么:
如果OrderInfo
是类(引用类型),那么您可以修改对象的属性,(您不能将它们分配为 null 或新的引用)。
var ordersList = new List<OrdersInfo>();
ordersList.Add(new OrdersInfo() { TYPE = "P" });
ordersList.Add(new OrdersInfo() { TYPE = "S" });
ordersList.Add(new OrdersInfo() { TYPE = "P" });
ordersList.Select(r => (r.TYPE == "P" ? r.TYPE = "Project" : r.TYPE = "Support")).ToList();
你的类定义为:
class OrdersInfo
{
public string TYPE { get; set; }
}
这是屏幕截图
有趣的是,我没有将结果分配回ordersList