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

◆ LastIndexOf() [3/3]

static int System.Array.LastIndexOf ( Array array,
object? value,
int startIndex,
int count )
inlinestatic

Definition at line 2015 of file Array.cs.

2016 {
2017 if (array == null)
2018 {
2019 ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
2020 }
2021 int lowerBound = array.GetLowerBound(0);
2022 if (array.Length == 0)
2023 {
2024 return lowerBound - 1;
2025 }
2027 {
2028 ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index();
2029 }
2030 if (count < 0)
2031 {
2032 ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count();
2033 }
2034 if (count > startIndex - lowerBound + 1)
2035 {
2036 ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.endIndex, ExceptionResource.ArgumentOutOfRange_EndIndexStartIndex);
2037 }
2038 if (array.Rank != 1)
2039 {
2040 ThrowHelper.ThrowRankException(ExceptionResource.Rank_MultiDimNotSupported);
2041 }
2042 int num = startIndex - count + 1;
2043 if (array is object[] array2)
2044 {
2045 if (value == null)
2046 {
2047 for (int num2 = startIndex; num2 >= num; num2--)
2048 {
2049 if (array2[num2] == null)
2050 {
2051 return num2;
2052 }
2053 }
2054 }
2055 else
2056 {
2057 for (int num3 = startIndex; num3 >= num; num3--)
2058 {
2059 object obj = array2[num3];
2060 if (obj != null && obj.Equals(value))
2061 {
2062 return num3;
2063 }
2064 }
2065 }
2066 return -1;
2067 }
2068 CorElementType corElementTypeOfElementType = array.GetCorElementTypeOfElementType();
2069 if (corElementTypeOfElementType.IsPrimitiveType())
2070 {
2071 if (value == null)
2072 {
2073 return lowerBound - 1;
2074 }
2075 if (array.IsValueOfElementType(value))
2076 {
2077 int adjustedIndex2 = num - lowerBound;
2078 int num4 = -1;
2080 {
2081 case CorElementType.ELEMENT_TYPE_BOOLEAN:
2082 case CorElementType.ELEMENT_TYPE_I1:
2083 case CorElementType.ELEMENT_TYPE_U1:
2085 break;
2086 case CorElementType.ELEMENT_TYPE_CHAR:
2087 case CorElementType.ELEMENT_TYPE_I2:
2088 case CorElementType.ELEMENT_TYPE_U2:
2090 break;
2091 case CorElementType.ELEMENT_TYPE_I4:
2092 case CorElementType.ELEMENT_TYPE_U4:
2094 break;
2095 case CorElementType.ELEMENT_TYPE_I8:
2096 case CorElementType.ELEMENT_TYPE_U8:
2097 case CorElementType.ELEMENT_TYPE_I:
2098 case CorElementType.ELEMENT_TYPE_U:
2100 break;
2101 case CorElementType.ELEMENT_TYPE_R4:
2103 break;
2104 case CorElementType.ELEMENT_TYPE_R8:
2106 break;
2107 }
2108 return ((num4 >= 0) ? num : lowerBound) + num4;
2109 }
2110 }
2111 for (int num5 = startIndex; num5 >= num; num5--)
2112 {
2113 object value2 = array.GetValue(num5);
2114 if (value2 == null)
2115 {
2116 if (value == null)
2117 {
2118 return num5;
2119 }
2120 }
2121 else if (value2.Equals(value))
2122 {
2123 return num5;
2124 }
2125 }
2126 return lowerBound - 1;
2127 static int GenericLastIndexOf<T>(Array array, object value, int adjustedIndex, int length) where T : struct, IEquatable<T>
2128 {
2129 return UnsafeArrayAsSpan<T>(array, adjustedIndex, length).LastIndexOf(Unsafe.As<byte, T>(ref value.GetRawData()));
2130 }
2131 }
static Span< T > UnsafeArrayAsSpan< T >(Array array, int adjustedIndex, int length)
Definition Array.cs:2624

References System.array, System.count, System.length, System.obj, System.startIndex, System.T, System.ThrowHelper.ThrowArgumentNullException(), System.ThrowHelper.ThrowArgumentOutOfRangeException(), System.ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count(), System.ThrowHelper.ThrowRankException(), System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index(), System.Array.UnsafeArrayAsSpan< T >(), and System.value.