C# DataTable.Rows.Clear() 不清除行[重复]

     2023-05-07     97

关键词:

【中文标题】C# DataTable.Rows.Clear() 不清除行[重复]【英文标题】:C# DataTable.Rows.Clear() not clearing rows [duplicate] 【发布时间】:2019-03-06 21:52:44 【问题描述】:

我有一个包含许多表的DataSet dsComponents它们都只在内存中,我不将它们与任何数据库同步。有时我需要删除所有行以释放一些内存,但该功能似乎不起作用(基于this answer)

if(dsComponents.Tables.Contains("MemoryHistory"))

  dsComponents.Tables["MemoryHistory"].Rows.Clear();

但如果我在这段代码之后立即中断,则表明表中仍然存在所有行。我也试过了:

if(dsComponents.Tables.Contains("MemoryHistory"))

  lock(dsComponents.Tables["MemoryHistory"])
  
    foreach (DataRow row in dsComponents.Tables["MemoryHistory"].Rows)
    
      row.Delete();
    
  
  dsComponents.Tables["MemoryHistory"].Rows.Clear();

这个失败并显示“集合已修改;枚举操作可能无法执行”,即使使用lock。那么,如何清除表中的行但保留表本身(如主键等)?

【问题讨论】:

dsComponents.Tables["MemoryHistory"].Rows.Clear() 应该可以正常工作。您确定它正在命中那行代码并且没有其他任何干扰吗? 是的,至少根据 VS 调试器它正在命中。我也在检查行被清除后立即休息 您不能使用foreach 循环然后在循环内向集合中添加/删除元素,因此您可以尝试老式的for 循环,但要倒退,for (int i = dsComponents.Tables["MemoryHistory"].Rows.Count - 1; i >= 0; i--) 和然后在循环内调用dsComponents.Tables["MemoryHistory"].Rows[i].Delete() @jtate 成功了,谢谢 【参考方案1】:

这里的问题是您正在修改 Enumerable,因为您正在迭代它,这是不允许的。

您需要在不迭代行的情况下重置表的行属性。

想想像迭代List<T>

你不会这样做

foreach (var element in list)

    list.Remove(element);

相反,您会执行以下操作:

list.Clear();

在你的情况下,你会想要做

dsComponents.Tables["MemoryHistory"].Rows.Clear();

我不确定您是否需要锁定对象,但如果您澄清这一点,我很乐意修改我的答案。

【讨论】:

【参考方案2】:

就做吧

dsComponents.Tables["MemoryHistory"].Clear();

【讨论】:

这也将擦除表的主键。我不想再次重新定义约束... 你试过 dsComponents.Tables["MemoryHistory"] = dsComponents.Tables["MemoryHistory"].Clone(); ?

c#教程

C#教程C#是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。本教程将告诉您基础的C#编程,同时QKXue.NET将向您讲解C#编程语言相关的各种先进理念。现在开始学习C#!C#在线工具谁适合阅读本教... 查看详情

c#多线程之旅

...作四、线程和进程五、线程的使用和误用 原文地址:C#多线程之旅(1)——介绍和基本概念C#多线程之旅目录:C#多线程之旅(1)——介绍和基本概念C#多线程之旅(2)——创建和开始线程C#多线程之旅(3)——线程池C#多线程之旅(4)—... 查看详情

c#多线程之旅

...M源码地址:https://github.com/Jackson0714/Threads 原文地址:C#多线程之旅(4)——APM初探C#多线程之旅目录:C#多线程之旅(1)——介绍和基本概念C#多线程之旅(2)——创建和开始线程C#多线程之旅(3)——线程池C#多线程之旅(4)——APM初探... 查看详情

C# 窗口到 C# 电话窗口

】C#窗口到C#电话窗口【英文标题】:C#windowstoC#phonewindows【发布时间】:2015-11-0820:13:59【问题描述】:这与其说是帮助,不如说是一项任务,但是......经过1天的尝试,我无法让它发挥作用。这是我的代码privatestring_InetReadEx(stringsU... 查看详情

C#编组(C#调用C++ DLL)

】C#编组(C#调用C++DLL)【英文标题】:C#Marshalling(C#callC++DLL)【发布时间】:2017-08-1602:43:51【问题描述】:你们能帮我解决以下问题吗?我有一个C++函数dll,它将被另一个C#应用程序调用。我需要的功能之一如下:unsignedlongmakeArray... 查看详情

c#第一章第一个c#程序

第一个C#程序namespace是C#中组织代码的方式,它的作用那个类似java中的包using在Java中作用如果导入其他包应该是用import关键字而在C#中应使用using关键字来引用class关键字与java一样C#也是一门面向对象的得语言,使用class关键字来... 查看详情

c#用一行c#代码播放声音

】c#用一行c#代码播放声音【英文标题】:c#playsoundwithonelineofc#code【发布时间】:2011-04-2215:15:28【问题描述】:我正在和其他一些程序员玩游戏。你可以写一行C#和任意多的xaml行。任何人都知道如何在分号前的一行中播放声音;... 查看详情

[c#]如何指定/GS,c#应用程序的选项?

】[c#]如何指定/GS,c#应用程序的选项?【英文标题】:[c#]Howtospecify/GS,optionstoc#application?【发布时间】:2009-11-1804:11:20【问题描述】:如您所知,/GS是VisualC++编译器或链接器选项。我可以在c#编译器或链接器中指定/GS吗?这些标志... 查看详情

学习c#编程经典书籍

1.《C#语言程序设计》(第4版):由微软公司的C#语言团队编写,是学习C#语言的必备经典著作。2.《C#高级编程》(第9版):由AndrewTroelsen编写,涵盖了C#语言的高级特性和最佳实践。3.《CLRviaC#》(第4版):由JeffreyRichter编写,... 查看详情

c#简介

和大家复习一下C#基础C#简介C#是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由Ecma和ISO核准认可的。C#是由AndersHejlsberg和他的团队在.Net框架开发期间开发的。C#是专为公共语言基础结构(CLI)设计... 查看详情

C# - 使用自定义配置在运行时编译 c# 代码

】C#-使用自定义配置在运行时编译c#代码【英文标题】:C#-Compilec#codeatruntimewithcustomconfiguration【发布时间】:2019-06-1811:18:31【问题描述】:我有一个问题,CodeDom编译器是否可以使用自定义配置(例如x64位或x86位)编译c#代码。默... 查看详情

在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

】在C#中以编程方式检查字符串是不是包含有效的C#代码【英文标题】:CheckifastringcontainsvalidC#codeprogramaticallyinC#在C#中以编程方式检查字符串是否包含有效的C#代码【发布时间】:2021-10-3019:37:25【问题描述】:我有一个包含C#代码... 查看详情

c#多线程之旅——介绍和基本概念

...作四、线程和进程五、线程的使用和误用 原文地址:C#多线程之旅(1)——介绍和基本概念C#多线程之旅目录:C#多线程之旅(1)——介绍和基本概念C#多线程之旅(2)——创建和开始线程C#多线程之旅(3)——线程池C#多线程之旅(4)—... 查看详情

[c#]c#中yieldreturn用法分析(代码片段)

C#中yieldreturn用法分析这篇文章主要介绍了C#中yieldreturn用法,对比使用yieldreturn与不使用yieldreturn的流程,更直观的分析了yieldreturn的用法,需要的朋友可以参考下.本文实例讲述了C#中yieldreturn用法,并且对比了使用yieldreturn与... 查看详情

C#!条件属性?

】C#!条件属性?【英文标题】:C#!Conditionalattribute?【发布时间】:2012-01-0400:53:02【问题描述】:C#有没有Conditional(!Conditional,NotConditional,Conditional(!))属性吗?我知道C#有一个Conditionalattribute:[Conditional("ShowDebugString")]publicstaticvoidShowD... 查看详情

C# 正确格式化(缩进、对齐)C#

】C#正确格式化(缩进、对齐)C#【英文标题】:C#toformat(indent,align)C#properly【发布时间】:2010-10-1510:54:18【问题描述】:我们有一个代码生成器munges给定数据库的架构,以自动化我们的内部n层架构。输出是各种C#部分类,每个文... 查看详情

c#快速入门~在java基础上,知道c#和java的不同即可(代码片段)

...文前提:如果你的主语言是java,现在想再学一门新语言C#,下文是在java基础上,对比和java的不同,快速上手C#,当然不是说学C#的前提是需要java,而是下文是从主语言是java的情况下,学习C#入门到进阶。C#学习参考文档和开发工... 查看详情

从 C# 调用 F# 代码

】从C#调用F#代码【英文标题】:CallF#codefromC#【发布时间】:2010-10-0311:21:56【问题描述】:我正在玩F#和C#,并且想。我设法让它在VisualStudio中以相反的方式工作,方法是在同一个解决方案中拥有两个项目,并将C#代码的引用添加... 查看详情