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

◆ IndexOf() [3/5]

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

Definition at line 1827 of file Array.cs.

1828 {
1829 if (array == null)
1830 {
1831 ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
1832 }
1833 if (array.Rank != 1)
1834 {
1835 ThrowHelper.ThrowRankException(ExceptionResource.Rank_MultiDimNotSupported);
1836 }
1837 int lowerBound = array.GetLowerBound(0);
1839 {
1840 ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index();
1841 }
1843 {
1844 ThrowHelper.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count();
1845 }
1846 int num = startIndex + count;
1847 if (array is object[] array2)
1848 {
1849 if (value == null)
1850 {
1851 for (int i = startIndex; i < num; i++)
1852 {
1853 if (array2[i] == null)
1854 {
1855 return i;
1856 }
1857 }
1858 }
1859 else
1860 {
1861 for (int j = startIndex; j < num; j++)
1862 {
1863 object obj = array2[j];
1864 if (obj != null && obj.Equals(value))
1865 {
1866 return j;
1867 }
1868 }
1869 }
1870 return -1;
1871 }
1872 CorElementType corElementTypeOfElementType = array.GetCorElementTypeOfElementType();
1873 if (corElementTypeOfElementType.IsPrimitiveType())
1874 {
1875 if (value == null)
1876 {
1877 return lowerBound - 1;
1878 }
1879 if (array.IsValueOfElementType(value))
1880 {
1882 int num2 = -1;
1884 {
1885 case CorElementType.ELEMENT_TYPE_BOOLEAN:
1886 case CorElementType.ELEMENT_TYPE_I1:
1887 case CorElementType.ELEMENT_TYPE_U1:
1889 break;
1890 case CorElementType.ELEMENT_TYPE_CHAR:
1891 case CorElementType.ELEMENT_TYPE_I2:
1892 case CorElementType.ELEMENT_TYPE_U2:
1894 break;
1895 case CorElementType.ELEMENT_TYPE_I4:
1896 case CorElementType.ELEMENT_TYPE_U4:
1898 break;
1899 case CorElementType.ELEMENT_TYPE_I8:
1900 case CorElementType.ELEMENT_TYPE_U8:
1901 case CorElementType.ELEMENT_TYPE_I:
1902 case CorElementType.ELEMENT_TYPE_U:
1904 break;
1905 case CorElementType.ELEMENT_TYPE_R4:
1907 break;
1908 case CorElementType.ELEMENT_TYPE_R8:
1910 break;
1911 }
1912 return ((num2 >= 0) ? startIndex : lowerBound) + num2;
1913 }
1914 }
1915 for (int k = startIndex; k < num; k++)
1916 {
1917 object value2 = array.GetValue(k);
1918 if (value2 == null)
1919 {
1920 if (value == null)
1921 {
1922 return k;
1923 }
1924 }
1925 else if (value2.Equals(value))
1926 {
1927 return k;
1928 }
1929 }
1930 return lowerBound - 1;
1931 static int GenericIndexOf<T>(Array array, object value, int adjustedIndex, int length) where T : struct, IEquatable<T>
1932 {
1933 return UnsafeArrayAsSpan<T>(array, adjustedIndex, length).IndexOf(Unsafe.As<byte, T>(ref value.GetRawData()));
1934 }
1935 }
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.ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count(), System.ThrowHelper.ThrowRankException(), System.ThrowHelper.ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_Index(), System.Array.UnsafeArrayAsSpan< T >(), and System.value.