32 internal static int[] Copy(
int[] array)
34 if (array ==
null || array.Length == 0)
35 return Array.Empty<
int>();
37 var copy =
new int[array.Length];
38 Array.Copy(array, copy, array.Length);
42 internal static Type[] Copy(Type[] array)
44 if (array ==
null || array.Length == 0)
45 return Type.EmptyTypes;
47 var copy =
new Type[array.Length];
48 Array.Copy(array, copy, array.Length);
52 internal static T[] ToArray<T, V>(List<V> list, T[] empty) where V : T
54 if (list ==
null || list.Count == 0)
57 var array =
new T[list.Count];
58 for (
int i = 0; i < array.Length; i++)
64 internal static T[] ToArray<T>(IEnumerable<T> values)
66 return values ==
null ? Array.Empty<T>() :
new List<T>(values).ToArray();
70 internal static bool ArrayEquals(Type[] t1, Type[] t2)
76 return t2.Length == 0;
78 return t1.Length == 0;
80 if (t1.Length == t2.Length)
82 for (
int i = 0; i < t1.Length; i++)
83 if (!TypeEquals(t1[i], t2[i]))
92 internal static bool TypeEquals(Type t1, Type t2)
102 internal static int GetHashCode(Type[] types)
108 foreach (var t
in types)
113 h ^= t.GetHashCode();
120 internal static bool ArrayEquals(CustomModifiers[] m1, CustomModifiers[] m2)
122 if (m1 ==
null || m2 ==
null)
125 if (m1.Length != m2.Length)
128 for (
int i = 0; i < m1.Length; i++)
129 if (!m1[i].Equals(m2[i]))
135 internal static int GetHashCode(CustomModifiers[] mods)
139 foreach (var mod
in mods)
140 h ^= mod.GetHashCode();
145 internal static T NullSafeElementAt<T>(T[] array,
int index)
147 return array ==
null ? default : array[index];
150 internal static int NullSafeLength<T>(T[] array)
152 return array ==
null ? 0 : array.Length;