相关疑难解决方法(0)

是否可以删除列表列表中的项目而不会丢失原始引用?

好的,这有点难以问,但我会尝试.我有一个带有对象的列表(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)

.net c#

5
推荐指数
2
解决办法
2012
查看次数

收集被修改; 枚举操作可能不会为哈希表执行

我有这个计时器功能,它给我以下异常.
收集被修改; 从哈希表中删除对象后,枚举操作可能无法执行.

什么是实现类似功能的解决方案

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)

c# enumeration

4
推荐指数
1
解决办法
3470
查看次数

C#:收藏被修改; 枚举操作可能无法执行

我的目标是从我的应用程序中的用户列表中删除用户.但我无法理解此错误的底部.有人请保释我.

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)

c# enumeration

4
推荐指数
2
解决办法
2万
查看次数

如何在同时删除项目时迭代列表?

我正在尝试找到一种优雅的方法来迭代列表,同时删除项目.
我知道这个解决方案.但我的条件更难:

  • 所有单线程都在这里
  • 迭代必须是前进的.
  • 每个项目必须只处理一次.
  • 在处理1个项目时,可以删除多个和随机项目.
  • 物品是复杂而聪明的物品.它们执行自定义方法,并且可以决定删除某些项目(0到all).
  • (添加和插入也可能发生,但是现在这并不重要,如果有办法同时处理这个,那就太好了)

问题:这可能吗?如果有,怎么样?


我有想法将对象标记已删除/不活动.当我稍后再次迭代时,我将删除它们而不要求它们做事情.迭代将经常重复,这就是为什么每个对象在每次迭代时必须正好转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)

c# iteration list

4
推荐指数
1
解决办法
920
查看次数

在foreach循环中删除列表中的项目c#

如果我在 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)

c# foreach

4
推荐指数
1
解决办法
9811
查看次数

枚举器实例化后修改集合报错

我正在尝试打印多个 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)

c#

3
推荐指数
1
解决办法
1万
查看次数

收集被修改; 枚举操作可能无法执行.C#

我需要帮助.我正在和一个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)

笔记:

  • 在线列表是一个arraylist
  • nowtime和x.time是DateTime.

调用堆栈

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)

.net c# multithreading invoke

2
推荐指数
1
解决办法
2万
查看次数

使用.ToList()时的Null异常.C#中的ForEach()

我正在使用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)

我有什么优雅的替代品?

c# list

2
推荐指数
1
解决办法
701
查看次数

在foreach中删除通用列表中的项目

我现在正在编码拾取器(硬币等),但是当你拿起东西时...它不再在地面上了.

但我得到一个例外: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)

c#

1
推荐指数
1
解决办法
1577
查看次数

我正在尝试从字符串列表中删除空字符串,但奇怪的是并非所有字符串都被删除

我有一个要发送给该方法的字符串列表。该方法获取列表,对其进行迭代并删除所有空字符串。在我发送的列表中,共有 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)

c# list

1
推荐指数
2
解决办法
162
查看次数

标签 统计

c# ×10

list ×3

.net ×2

enumeration ×2

foreach ×1

invoke ×1

iteration ×1

multithreading ×1