add & foreach (remove)

本文探讨了foreach与for循环的区别,特别是在列表操作中的表现。foreach适用于简单的遍历任务,而涉及列表修改时则推荐使用for循环。文章还讨论了在循环中进行增删操作时可能出现的问题及解决方法。

http://www.2cto.com/kf/201403/286536.html

foreach 就是用来遍历读取的。其他操作最好都用for循环,对于列表而言,如果有remove,则遍历时候要对i-1.例如,列表第二个被删后,i等于3了,下次要读取第三个,但是由于2被删了,原来的3已经补位成为2了,此时实际读取的将是原来的4,也就是会漏掉原来的3.

i-1是一种解决方法,还有一种是可以在循环的时候把要删除的元素标记,最后统一删除。

通过foreach 循环对数组或列表赋值是没有意义的。因为它并不会改变原数组的值。因为,当使用foreac来迭代访问数组元素时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋值给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。因此,如果希望改变数组元素的值,则不能使用foreach这种循环。

在foreach中对列表进行增删操作会抛出异常:ConcurrentModificationException
这与foreach的底层实现有关。

关于add返回的boolean值:这个布尔值是和collection规则有关的。
比如:对于集合而言,给它添加一个已有的元素,是添加不进去的,此时将会返回false。
remove返回的也是Boolean值,其大体意思和add也差不多。

在C#中,`add`和`remove`主要用于事件的定义和操作,它们是事件访问器,类似于属性的`get`和`set`访问器。 ### 事件中的`add`和`remove` 事件是一种特殊的委托,`add`用于向事件添加处理程序,`remove`用于从事件中移除处理程序。C#编译器为事件的`add`和`remove`方法增加`[MethodImpl (MethodImplOptions.Synchronized)]`属性,目的是确保在操作实例或静态事件成员时,同一时刻只能有一个`add`方法或者`remove`方法可以执行,避免委托对象的链表被破坏,但CLR实现线程同步的方式存在一些问题[^1]。 以下是一个示例代码: ```csharp using System; // 定义一个委托 public delegate void MyDelegate(string message); public class EventExample { private MyDelegate _myEvent; // 定义事件 public event MyDelegate myEvent { add { _myEvent += value; } remove { _myEvent -= value; } } public void RaiseEvent(string message) { _myEvent?.Invoke(message); } } class Program { static void HandleEvent(string message) { Console.WriteLine($"收到消息: {message}"); } static void Main() { EventExample example = new EventExample(); // 添加事件处理程序 example.myEvent += HandleEvent; example.RaiseEvent("Hello, World!"); // 移除事件处理程序 example.myEvent -= HandleEvent; example.RaiseEvent("This event won't be handled."); } } ``` ### 集合中的`add`和`remove` 在集合类中,`add`和`remove`方法通常用于添加和移除集合中的元素。例如,`List<T>`类有`Add`和`Remove`方法: ```csharp using System; using System.Collections.Generic; class Program { static void Main() { List<int> numbers = new List<int>(); // 添加元素 numbers.Add(1); numbers.Add(2); numbers.Add(3); // 移除元素 numbers.Remove(2); foreach (int number in numbers) { Console.WriteLine(number); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值