Rhino.Kit.RemoveListener C# (CSharp) Method

RemoveListener() public static method

Remove listener from bag of listeners.
Remove listener from bag of listeners. The function does not modify bag and return a new collection containing all listeners from bag except listener. If bag does not contain listener, the function returns bag.

For usage example, see AddListener(object, object) .

public static RemoveListener ( object bag, object listener ) : object
bag object Current collection of listeners.
listener object Listener to remove from bag
return object
		public static object RemoveListener(object bag, object listener)
		{
			if (listener == null)
			{
				throw new ArgumentException();
			}
			if (listener is object[])
			{
				throw new ArgumentException();
			}
			if (bag == listener)
			{
				bag = null;
			}
			else
			{
				if (bag is object[])
				{
					object[] array = (object[])bag;
					int L = array.Length;
					// bag has at least 2 elements if it is array
					if (L < 2)
					{
						throw new ArgumentException();
					}
					if (L == 2)
					{
						if (array[1] == listener)
						{
							bag = array[0];
						}
						else
						{
							if (array[0] == listener)
							{
								bag = array[1];
							}
						}
					}
					else
					{
						int i = L;
						do
						{
							--i;
							if (array[i] == listener)
							{
								object[] tmp = new object[L - 1];
								System.Array.Copy(array, 0, tmp, 0, i);
								System.Array.Copy(array, i + 1, tmp, i, L - (i + 1));
								bag = tmp;
								break;
							}
						}
						while (i != 0);
					}
				}
			}
			return bag;
		}