Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ RemoveImpl()

override? Delegate System.MulticastDelegate.RemoveImpl ( Delegate value)
inlinesealedprotectedvirtual

Reimplemented from System.Delegate.

Definition at line 301 of file MulticastDelegate.cs.

302 {
304 {
305 return this;
306 }
307 if (!(multicastDelegate._invocationList is object[]))
308 {
309 if (!(_invocationList is object[] array))
310 {
311 if (Equals(value))
312 {
313 return null;
314 }
315 }
316 else
317 {
318 int num = (int)_invocationCount;
319 int num2 = num;
320 while (--num2 >= 0)
321 {
322 if (value.Equals(array[num2]))
323 {
324 if (num == 2)
325 {
326 return (Delegate)array[1 - num2];
327 }
330 }
331 }
332 }
333 }
334 else if (_invocationList is object[] array2)
335 {
336 int num3 = (int)_invocationCount;
337 int num4 = (int)multicastDelegate._invocationCount;
338 for (int num5 = num3 - num4; num5 >= 0; num5--)
339 {
340 if (EqualInvocationLists(array2, multicastDelegate._invocationList as object[], num5, num4))
341 {
342 if (num3 - num4 == 0)
343 {
344 return null;
345 }
346 if (num3 - num4 == 1)
347 {
348 return (Delegate)array2[(num5 == 0) ? (num3 - 1) : 0];
349 }
352 }
353 }
354 }
355 return this;
356 }
MulticastDelegate NewMulticastDelegate(object[] invocationList, int invocationCount, bool thisIsMultiCastAlready)
MulticastDelegate(object target, string method)
override bool Equals([NotNullWhen(true)] object? obj)
object[] DeleteFromInvocationList(object[] invocationList, int invocationCount, int deleteIndex, int deleteCount)
static bool EqualInvocationLists(object[] a, object[] b, int start, int count)

References System.MulticastDelegate._invocationCount, System.MulticastDelegate._invocationList, System.array, System.MulticastDelegate.DeleteFromInvocationList(), System.Runtime.Serialization.Dictionary, System.MulticastDelegate.EqualInvocationLists(), System.MulticastDelegate.Equals(), System.MulticastDelegate.NewMulticastDelegate(), and System.value.