好的,这有点难以问,但我会尝试.我有一个带有对象的列表(Lots),它再次包含一个带有对象的列表(Wafers).当我更改晶圆内的值时,它将在两个列表中更改!这就是我想要的.但是当我想从复制的列表中删除晶圆时,不应该从原始列表中删除它.所以我想在每个批次中都有一个新的晶圆列表,但是对晶圆的参考应该与原始批次相同,因为我想要更改晶圆的值,它应该改变原始晶圆和复制晶圆的值.没有深层复制可能吗?
我有以下代码,以便更好地解释它:
public class Lot
{
public string LotName { get; set; }
public List<Wafer> Wafers { get; set; }
}
public class Wafer
{
public string WaferName { get; set; }
}
[Test]
public void ListInListTest()
{
//Some Testdata
List<Lot> lotList = new List<Lot>();
Lot lot = new Lot();
lot.LotName = "Lot1";
lot.Wafers = new List<Wafer>();
Wafer wafer = new Wafer();
wafer.WaferName = "Wafer1";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = "Wafer2";
lot.Wafers.Add(wafer);
wafer = new Wafer();
wafer.WaferName = …Run Code Online (Sandbox Code Playgroud) 我有这个计时器功能,它给我以下异常.
收集被修改; 从哈希表中删除对象后,枚举操作可能无法执行.
什么是实现类似功能的解决方案
void timerFunction(object data)
{
lock (tMap.SyncRoot)
{
foreach (UInt32 id in tMap.Keys)
{
MyObj obj=(MyObj) runScriptMap[id];
obj.time = obj.time -1;
if (obj.time <= 0)
{
tMap.Remove(id);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的目标是从我的应用程序中的用户列表中删除用户.但我无法理解此错误的底部.有人请保释我.
if (txtEmailID.Text.Length > 0)
{
users = UserRespository.GetUserName(txtEmailID.Text);
bool isUserAvailable=false;
foreach (EduvisionUser aUser in users) // Exception thrown in this line
{
isUserAvailable = true;
if(!aUser.Activated)
{
users.Remove(aUser);
}
}
if (users.Count == 0 && isUserAvailable)
{
DeactivatedUserMessage();
return;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种优雅的方法来迭代列表,同时删除项目.
我知道这个解决方案.但我的条件更难:
问题:这可能吗?如果有,怎么样?
我有想法将对象标记为已删除/不活动.当我稍后再次迭代时,我将删除它们而不要求它们做事情.迭代将经常重复,这就是为什么每个对象在每次迭代时必须正好转1圈.那会有用吗?
伪代码:
class Foo
{
public void DoStuff()
{
// do other stuff
if (condition)
Kill(x); // should result in list.RemoveAt(x) somehow
}
}
class Program
{
[STAThread]
static void Main(string[] args)
{
List<Foo> list = new List<Foo>();
for (int i = 0; i < 15; i++)
list.Add(new Foo());
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 如果我在 foreach 循环中使用一个项目并且我不能使用该项目,它必须删除当前在 foreach 循环中的项目。
这是我现在拥有的代码:
foreach (Line line in linelijst)
{
try
{
if (line.ActorIndex() == 0)
{
line.setStartPoint(actorenlijst[0].getLinePoint()); //if actorenlijst[0] doesn't excist it has to delete the current line
}
if (line.ActorIndex() == 1)
{
line.setStartPoint(actorenlijst[1].getLinePoint()); //if actorenlijst[1] doesn't excist it has to delete the current line
}
if (line.ActorIndex() == 2)
{
line.setStartPoint(actorenlijst[2].getLinePoint()); //if actorenlijst[2] doesn't excist it has to delete the current line
}
Point start = line.getStartPoint();
Point end = line.getEndPoint();
Pen lijn = new …Run Code Online (Sandbox Code Playgroud) 我正在尝试打印多个 PDF 字节数组。由于我需要允许用户同时打印多个报告的功能,因此我使用了 Parallel foreach。该函数可以很好地通过第一个字节数组,但在第二个出队时,我得到“在实例化枚举器后修改了集合”。错误。如何在仍允许用户同时打印的同时解决此问题?
这是代码:
public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
{
Parallel.ForEach(printQueue, (currentFile) =>
{
var printFile = printQueue.Dequeue();
PrintWithGSPrint(printFile, printer, copies);
});
}
Run Code Online (Sandbox Code Playgroud) 我需要帮助.我正在和一个arraylist一起工作,突然间我得到了这个错误.
mscorlib.dll中发生了未处理的"System.InvalidOperationException"类型异常
附加信息:收集已修改; 枚举操作可能无法执行.
这是显示异常的代码...
foreach (PC_list x in onlinelist) {
if ((nowtime.Subtract(x.time)).TotalSeconds > 5) {
Invoke(new MethodInvoker(delegate {
index = Main_ListBox.FindString(x.PcName);
if(index != ListBox.NoMatches)
Main_ListBox.Items.RemoveAt(index);
}));
onlinelist.Remove(x);
//Thread.Sleep(500);
}
}
Run Code Online (Sandbox Code Playgroud)
哪里
public class PC_list {
public string PcName;
public string ip;
public string status;
public string NickName;
public DateTime time;
}
Run Code Online (Sandbox Code Playgroud)
笔记:
调用堆栈
mscorlib.dll!System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext() + 0x122 bytes
BlueBall.exe!BlueBall.BlueBall.clean_arraylist() Line 74 + 0x1a8 bytes C#
BlueBall.exe!BlueBall.BlueBall.server() Line 61 + 0x8 bytes C#
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x63 bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext …Run Code Online (Sandbox Code Playgroud) 我正在使用HtmlAgilityPack解析一些数据并编写如下所示的语句来删除不需要的内容 -
doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());
Run Code Online (Sandbox Code Playgroud)
当<ul>HTML文档中存在元素时,这很有效.但是,如果没有<ul>元素,则在将其转换为.ToList()时,我得到的值不能为null异常.
我不想使用以下 -
doc.DocumentNode.SelectNodes("//ul")== null ? null : doc.DocumentNode.SelectNodes("//ul").ToList().ForEach(a => a.Remove());
Run Code Online (Sandbox Code Playgroud)
我有什么优雅的替代品?
我现在正在编码拾取器(硬币等),但是当你拿起东西时...它不再在地面上了.
但我得到一个例外:System.InvalidOperationException.由:引起map.Remove(),并由foreach循环引发.
那么,如何从列表中正确删除拾取器?
foreach (CollisionTiles tile in map.CollissionTiles)
{
if (!tile.isTransparant)
player.Collision(tile.Rectangle, map.Width, map.Height);
else
{
if (player.PickUp(tile, map.Width, map.Height))
map.Remove(tile);
}
camera.Update(player.Position, map.Width, map.Height);
}
Run Code Online (Sandbox Code Playgroud)
该map.Remove()无效:
public void Remove(CollisionTiles tile)
{
this.collissionTiles.Remove(tile);
}
Run Code Online (Sandbox Code Playgroud) 我有一个要发送给该方法的字符串列表。该方法获取列表,对其进行迭代并删除所有空字符串。在我发送的列表中,共有 7 个空白字符串,但该方法似乎只删除了其中的 4 个。
这是方法:
public List<string> RemoveWhiteSpace(List<string> rawData)
{
for (int i = 0; i < rawData.Count; i++)
{
if (rawData[i].Length == 0)
{
rawData.RemoveAt(i);
}
}
return rawData;
}
Run Code Online (Sandbox Code Playgroud)
这是直接从控制台复制的列表本身:
@0
D=M
@1
D=D-M
@10
D;JGT
@1
D=M
@12
0;JMP
@0
D=M
@2
M=D
@14
0;JMP
Run Code Online (Sandbox Code Playgroud)
这是该方法的输出字符串。它无法消除 3 个空字符串。我测试并检查了未被删除的字符串的索引,它们是索引:4,5 和 6。我还检查了这些字符串的长度,它们实际上是 0。我不明白问题是什么.
@0
D=M
@1
D=D-M
@10
D;JGT
@1
D=M
@12
0;JMP
@0
D=M
@2
M=D
@14
0;JMP
Run Code Online (Sandbox Code Playgroud)