Tag: foreach

Class是否需要实现IEnumerable才能使用Foreach

这是在C#中,我有一个类,我从其他人的DLL使用。 它没有实现IEnumerable,但有2个传递IEnumerator的方法。 有没有办法可以在这些上使用foreach循环。 我正在使用的课程是密封的。

C#inheritance自Dictionary,迭代KeyValuePairs

我有一个inheritance自Dictionary 。 在实例方法中,我想迭代所有KeyValuePair 。 我尝试过以下操作: foreach (KeyValuePair pair in base) 但是这失败了以下错误: 在此上下文中使用关键字“base”无效 如何在从Dictionary派生的类中的实例方法中迭代KeyValuePair Dictionary ? 编辑:我发现我可以执行以下操作: var enumerator = base.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair pair = enumerator.Current; } 但是,我仍然想知道是否有办法通过foreach循环执行此操作。 编辑:感谢有关不从Dictionaryinheritance的建议。 我System.Collections.IEnumerable, ICollection<KeyValuePair>, IEnumerable<KeyValuePair>, IDictionary是在实现System.Collections.IEnumerable, ICollection<KeyValuePair>, IEnumerable<KeyValuePair>, IDictionary 。

如何在C#中实现foreach?

在C#中如何实现foreach ? 我想它的一部分看起来像: var enumerator = TInput.GetEnumerator(); while(enumerator.MoveNext()) { // do some stuff here } 但是我不确定究竟发生了什么。 返回enumerator.Current器使用什么方法。每个循环的当前流程? 它是为[每个周期]返回还是采用匿名函数或其他东西来执行foreach的主体?

为什么我不能在foreach中修改循环变量?

为什么foreach循环是只读循环? 有什么理由呢?

在foreach循环中启动一个新线程

我有一个对象列表,我想循环遍历该列表并启动一个新线程,传入当前对象。 我写了一个我认为应该做的事情的例子,但它不起作用。 具体来说,似乎线程在每次迭代时都被覆盖。 这对我来说真的没有意义,因为我每次都在创建一个新的Thread对象。 这是我写的测试代码 class Program { static void Main(string[] args) { TestClass t = new TestClass(); t.ThreadingMethod(); } } class TestClass { public void ThreadingMethod() { var myList = new List { new MyClass(“test1”), new MyClass(“test2”) }; foreach(MyClass myObj in myList) { Thread myThread = new Thread(() => this.MyMethod(myObj)); myThread.Start(); } } public […]

Foreach可以抛出InvalidCastException吗?

想象一下以下代码: class foreach_convert { public static void method2() { List x = new List(); x.Add(5); foreach (string s in x) { //InvalidCastException in runtime } } } 我想知道,为什么这种foreach行为如此……不是C#式的? 这里发生的是对子类的隐式强制转换,它容易出错并且似乎在语言中的其他任何地方都被禁止。 或者我不对吗? PS我之所以问的原因是我的项目中的类似代码中有一个错误,我曾经在外部库中迭代一个自定义Collection,它被称为SomeTypeCollection ,但实际上提供了一个基类型的集合items和可能包含SomeOtherType项目。 我的错,但仍然没有语言,也没有编译器提供任何明确的提示/警告,这对C#来说很不寻常……

如何在foreach循环中对迭代的元素进行分段

我需要遍历整个用户列表,但需要一次抓取20个。 foreach (var student in Class.Students.Take(20)) { Console.WriteLine(“You belong to Group ” + groupNumber); groupNumber++; } 这样,前20个将属于组1,第二个20属于组2,依此类推。 采取正确的语法吗? 我相信Take将花费20来完成。 谢谢!

为什么Parallel.ForEach比AsParallel()快得多.ForAll()尽管MSDN建议不然?

我一直在做一些调查,看看我们如何创建一个贯穿树的multithreading应用程序。 为了找到如何以最佳方式实现这一点,我创建了一个运行在我的C:\ disk中的测试应用程序并打开所有目录。 class Program { static void Main(string[] args) { //var startDirectory = @”C:\The folder\RecursiveFolder”; var startDirectory = @”C:\”; var w = Stopwatch.StartNew(); ThisIsARecursiveFunction(startDirectory); Console.WriteLine(“Elapsed seconds: ” + w.Elapsed.TotalSeconds); Console.ReadKey(); } public static void ThisIsARecursiveFunction(String currentDirectory) { var lastBit = Path.GetFileName(currentDirectory); var depth = currentDirectory.Count(t => t == ‘\\’); //Console.WriteLine(depth + “: ” + […]

为什么我不能做foreach(DataTable.Rows中的var Item)?

有什么理由不能做到以下几点: foreach (var Item in DataTable.Rows) { 而不是必须这样做 foreach (DataRow Item in DataTable.Rows) { 我原以为这是可能的,就像在其他数据类型上一样。 例如: foreach (var Employee in Staff) { // string[] Staff etc… 当我尝试第一个foreach循环时,我得到错误CS0021:无法将带有[]的索引应用于类型为’object’的表达式 。 为什么编译器不能确定.Rows返回DataRows的集合?

for和foreach有什么区别?

for和foreach循环之间的主要区别是什么? 在哪些场景中我们可以使用而不是foreach ,反之亦然。 是否可以用简单的程序来展示? 两者对我来说都是一样的。 我无法区分它们。