Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用LINQ进行列表操作?_C#_Linq_List - Fatal编程技术网

C# 是否可以使用LINQ进行列表操作?

C# 是否可以使用LINQ进行列表操作?,c#,linq,list,C#,Linq,List,这可能是一个愚蠢的问题,但我一直使用linq来选择项目 但是我想知道是否有可能使用它的关键字来完成下面的简单任务 List<OrdersInfo> ordersList . . . foreach(OrdersInfo OI in ordersList) if(OI.TYPE == "P") OI.TYPE = "Project"; else OI.TYPE = "Support"; 列出订单列表 . . .

这可能是一个愚蠢的问题,但我一直使用linq来选择项目

但是我想知道是否有可能使用它的关键字来完成下面的简单任务

List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
        if(OI.TYPE == "P")
            OI.TYPE = "Project";
        else
        OI.TYPE = "Support";
列出订单列表
.
.
.
foreach(订单列表中的订单信息OI)
如果(OI.TYPE==“P”)
OI.TYPE=“项目”;
其他的
OI.TYPE=“支持”;
不,是一种查询语言,它在考虑查询定义方面确实很出色,但在这方面并不总是很好(速度和/或内存方面)


如果您想修改集合,请按照您已经完成的方式进行操作。

LINQ用于查询集合,对于修改,您当前的循环更具可读性和更好的方法,但如果您想要LINQ选项,则:

如果
OrderInfo
是一个类(引用类型),那么您可以修改对象的属性(您不能将它们指定为null或新引用)

这是截图


有趣的是,我没有将结果分配回
ordersList

您可以使用List类的每个方法

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);
    }
}
publicstaticvoidforeach(此IEnumerable en,Action)
{
foreach(英语中的T项)
{
行动(项目);
}
}
不是Linq解决方案,但它看起来是:

ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");

仅在
列表
实例上可用,而在
IEnumerable
上不可用

LINQ意味着无突变。如果您想操纵,请使用
foreach
。Tigran,我同意您的大部分答案,但您可以使用LINQ修改列表。(虽然不应该)抱歉,我没有看到您的答案我们同时发布,我们是来帮助您的,不是来竞争:)我不理解重复的OI.TYPEYes它是对的=)如果@AngelicCore希望有一个IEnumerable类型的ForEach方法,他/她可以创建自己的ForEach扩展method@AngelicCore看看这个答案,它被称为三元运算符:不确定是否存在语法错误,可能错误在于向某人展示了如何使用LINQ?@sixlettervariables来实现这一点,语法上是正确的,我实际上在VS中对它进行了测试。我同意不应该通过LINQ来实现,我在回答的开头也提到了这一点,但是如果有可能的话被否决了。。。隐马尔可夫模型。这对我来说是新的:)人们总是对那些“有效”但有XSS/SQL注入问题的代码投反对票,等等。
public static void ForEach<T>(this IEnumerable<T> en, Action<T> action)
{
    foreach(T item in en)
    {
        action(item);
    }
}
ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");