public static object AddListener(object bag, object listener)
{
if (listener == null)
{
throw new ArgumentException();
}
if (listener is object[])
{
throw new ArgumentException();
}
if (bag == null)
{
bag = listener;
}
else
{
if (!(bag is object[]))
{
bag = new object[] { bag, listener };
}
else
{
object[] array = (object[])bag;
int L = array.Length;
// bag has at least 2 elements if it is array
if (L < 2)
{
throw new ArgumentException();
}
object[] tmp = new object[L + 1];
System.Array.Copy(array, 0, tmp, 0, L);
tmp[L] = listener;
bag = tmp;
}
}
return bag;
}