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

◆ OnDeserialization()

virtual void System.Collections.Hashtable.OnDeserialization ( object? sender)
inlinevirtualinherited

Implements System.Runtime.Serialization.IDeserializationCallback.

Definition at line 1116 of file Hashtable.cs.

1117 {
1118 if (_buckets != null)
1119 {
1120 return;
1121 }
1122 HashHelpers.SerializationInfoTable.TryGetValue(this, out var value);
1123 if (value == null)
1124 {
1125 throw new SerializationException(SR.Serialization_InvalidOnDeser);
1126 }
1127 int num = 0;
1128 IComparer comparer = null;
1129 IHashCodeProvider hashCodeProvider = null;
1130 object[] array = null;
1131 object[] array2 = null;
1133 while (enumerator.MoveNext())
1134 {
1135 switch (enumerator.Name)
1136 {
1137 case "LoadFactor":
1138 _loadFactor = value.GetSingle("LoadFactor");
1139 break;
1140 case "HashSize":
1141 num = value.GetInt32("HashSize");
1142 break;
1143 case "KeyComparer":
1144 _keycomparer = (IEqualityComparer)value.GetValue("KeyComparer", typeof(IEqualityComparer));
1145 break;
1146 case "Comparer":
1147 comparer = (IComparer)value.GetValue("Comparer", typeof(IComparer));
1148 break;
1149 case "HashCodeProvider":
1150 hashCodeProvider = (IHashCodeProvider)value.GetValue("HashCodeProvider", typeof(IHashCodeProvider));
1151 break;
1152 case "Keys":
1153 array = (object[])value.GetValue("Keys", typeof(object[]));
1154 break;
1155 case "Values":
1156 array2 = (object[])value.GetValue("Values", typeof(object[]));
1157 break;
1158 }
1159 }
1160 _loadsize = (int)(_loadFactor * (float)num);
1161 if (_keycomparer == null && (comparer != null || hashCodeProvider != null))
1162 {
1163 _keycomparer = new CompatibleComparer(hashCodeProvider, comparer);
1164 }
1165 _buckets = new bucket[num];
1166 if (array == null)
1167 {
1168 throw new SerializationException(SR.Serialization_MissingKeys);
1169 }
1170 if (array2 == null)
1171 {
1172 throw new SerializationException(SR.Serialization_MissingValues);
1173 }
1174 if (array.Length != array2.Length)
1175 {
1176 throw new SerializationException(SR.Serialization_KeyValueDifferentSizes);
1177 }
1178 for (int i = 0; i < array.Length; i++)
1179 {
1180 if (array[i] == null)
1181 {
1182 throw new SerializationException(SR.Serialization_NullKey);
1183 }
1184 Insert(array[i], array2[i], add: true);
1185 }
1186 _version = value.GetInt32("Version");
1187 HashHelpers.SerializationInfoTable.Remove(this);
1188 }
IEqualityComparer _keycomparer
Definition Hashtable.cs:413

References System.Collections.Hashtable._buckets, System.Collections.Hashtable._keycomparer, System.Collections.Hashtable._loadFactor, System.Collections.Hashtable._loadsize, System.Collections.Hashtable._version, System.array, System.Collections.Hashtable.comparer, System.Runtime.Serialization.Dictionary, System.Insert, System.SR.Serialization_InvalidOnDeser, System.SR.Serialization_KeyValueDifferentSizes, System.SR.Serialization_MissingKeys, System.SR.Serialization_MissingValues, System.SR.Serialization_NullKey, System.Collections.HashHelpers.SerializationInfoTable, and System.value.

Referenced by System.Data.DataTable.DeserializeTableData().