最近在做编辑器,我们创建一个物体在数据类中就被add到管理数组中。当增加一个线段到数组中,我们要计算线段和其他线段是否有交点等一系列问题,这时候就需要我们在数组增加和移除处重写并增加事件推送。代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class MyList<T> : List<T>
/// <summary>
/// 增加元素触发事件
/// </summary>
public Action<T> addAction;
/// <summary>
/// 移除元素触发事件
/// </summary>
public Action<T> removeAction;
/// <summary>
/// 数组改变触发事件
/// </summary>
public Action<T> changeAction;
/// <summary>
/// 清除数组触发事件
/// </summary>
private Action clearAction;
public MyList()
public new void Add(T item)
base.Add(item);
if(addAction!=null) addAction.Invoke(item);
if(changeAction!=null)changeAction.Invoke(item);
public new void Remove(T item)
base.Remove(item);
if (removeAction != null) removeAction.Invoke(item);
if (changeAction != null) changeAction.Invoke(item);
public new void AddRanage(IEnumerable<T> collection)
base.AddRange(collection);
for (int i = 0; i < collection.Count(); i++)
if (addAction != null) addAction.Invoke(collection.ElementAt(i));
if (changeAction != null) changeAction.Invoke(collection.ElementAt(i));
public new void RemoveRange(int index,int count)
if (index < this.Count && index + count < this.Count)
for (int i = index; i < index+count; i++)
if (removeAction != null) removeAction.Invoke(this[i]);
if (changeAction != null) changeAction.Invoke(this[i]);
base.RemoveRange(index,count);
public new void Clear()
base.Clear();
if(clearAction!=null)
clearAction.Invoke();
对于插入Insert有需要监听的也可以自己添加。如有错误,欢迎留言。
最近在做编辑器,我们创建一个物体在数据类中就被add到管理数组中。当增加一个线段到数组中,我们要计算线段和其他线段是否有交点等一系列问题,这时候就需要我们在数组增加和移除处重写并增加事件推送。代码如下:using System;using System.Collections;using System.Collections.Generic;using System.Linq;usi...
定义:集合就是一种存放多个数据的容器类型,比如之前学过的数组Array(完整的类型是System.Array)。
预定义的常用集合:
动态数组:ArrayList;列表:List;字典:Dictionary;队列:Queue;栈:Stack。
动态数组ArrayList:
初始化,可以不指定大小;
获取长度,使用Count属性;
添加Add;
删除Remove,RemoveAt;
访问...
在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字段的值的话就很困难了。因此,趁着这个假期,就来解决这个一直遗留的小问题,本篇文章记录了我目前实现的方法,如果你有不同于文中所列出的方案的话,欢迎指出。
代码仓储地址:https://gith...
Product product = new Product();
product.Name = "name" + i;
product.Category = "Category" + i;
product.SellPrice = i;
_Products.Add(prod
在C#中对于给集合添加元素有常用的两种方法,分别是 Add 和 AddRange。
Add:将指定的对象添加到集合或者容器中
AddRange:向集合或者容器中的末尾添加数据数组。
本篇文章就来简单介绍下这两种方法的区别。
在我们做工业软件中,经常会遇到要实时监控某一点,在这个点变化时去做一些事情
放入程序里呢,就是要实时监控某一属性的值,当值发生变化时触发事件,其核心就是借助属性的Set方法,来判断当前set的值是否与原来的值相等,如果相等直接赋值不予理会,如果不相等,说明值变了,根据自己调用的方法,声明委托,事件,触发方法
核心代码:
public delegate void tempChan...
/// <typeparam name="T"></typeparam>
/// <param name="list1"></param>
/// <param name="list2"></param>
/// <returns&