c# - C# LINQ 如何更改数据源以及如何防止它?
问题描述
我正在尝试学习如何在 C# 中使用 LINQ。我不希望更改源列表,但不知何故它确实被这段代码改变了。该程序编译并运行没有错误(VS2019,W10,64)。break 语句中的断点显示 LinqList 已更改。有人可以告诉我我的错误在哪里吗?我有一个 zip 文件中的源代码。+
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQProblem
{
class Program
{
public static List<MyTestClass> LinqList = new List<MyTestClass>();
static void Main(string[] args)
{
// for loop to initialize LinqList
for ( var i = 0; i < 10; i++ )
{
LinqList.Add(new MyTestClass());
if (i % 2 != 0)
{
LinqList[i].left = i * 10;
LinqList[i].isChecked = true;
}
else
{
LinqList[i].left = (i + 200) * 10;
}
LinqList[i].right = LinqList[i].left + 5;
}
// filter LinqList and order by the smallest left
var filteredData = LinqList
.Where(x => x.isChecked )
.OrderBy(x => x.left ).ToList();
for (;;)
{
filteredData[0].isChecked = false;
// Re-filter (more code here but not necessary to illustrate the problem)
filteredData = filteredData
.Where(x => x.isChecked)
.OrderBy(x => x.left).ToList();
if (filteredData.Count == 0)
{
// everything works to here but now values in LinqList have been changed
filteredData = LinqList
.Where(x => x.isChecked)
.OrderBy(x => x.left).ToList();
// filteredData.Count now equal zero because isChecked in LinqList has been changed to false
break;
}
}
Console.WriteLine("\nPress any key to exit...");
Console.ReadLine();
}
}
}
namespace LINQProblem
{
class MyTestClass
{
public double left { get; set; }
public double right { get; set; }
public bool isChecked { get; set; }
}
}
解决方案
推荐阅读
- reactjs - gatsby remark 图片不显示图片
- r - 根据 2 列中的值重新排序 ggplot 中的标签
- c# - c# 从继承的类对象构造一个类
- pyspark - Pyspark - 更新 udf 中的列表
- jquery - 如何从另一个动态创建的按钮触发动态创建的按钮
- reactjs - 如何在 React 中解决这个加载程序问题?
- php - 想在 name.php 中使用 index.php 的输入
- android - 多个用户是否可以在 FCM 中的列表中同时订阅一个主题
- python - Django 错误“模型”对象不可迭代
- android - 如何在 React Native 中处理单个组件中的多个 API 调用?