/// <summary>Converts a List of RowStore-objects into an array of T-objects on a best-effort-match basis. Parallelized. Does not throw on any mismatches.</summary>
		public static T[] ToObjectArray<T>(this IReadOnlyList<dynamic> listOfDynamic, Func<T> objectFactory) where T : class
		{
			unchecked
			{
				var listOfRowStore = (IReadOnlyList<RowStore>)listOfDynamic;
				int newListCount = listOfRowStore.Count;
				T[] newList = new T[newListCount];
				if (newListCount == 0) return newList;

				RowStore firstElement = listOfRowStore[0];
				int fieldCount = firstElement.RowValues.Length;

				var settersArray = new Action<T, object>[fieldCount];
				var setters = ReflectionHelper_Setter<T>.Setters;
				var settersEnumerator = setters.GetEnumerator();

				while (settersEnumerator.MoveNext())
				{
					var setter = settersEnumerator.Current;
					if (firstElement.Schema.FieldMap.TryGetValue(setter.Key, out var index))
						settersArray[index] = setter.Value;
				}

				Parallel.For(0, newListCount, s_ParallelOptions, i =>
				{
					unchecked
					{
						T objT = objectFactory();
						newList[i] = objT;
						object[] rowValues = (listOfRowStore[i]).RowValues;

						for (int j = 0; j < rowValues.Length; ++j)
						{
							var setter = settersArray[j];
							if (setter != null)
							{
								object val = rowValues[j];
								setter(objT, val == DBNull.Value ? null : val);
							}
						}
					}
				});
				return newList;
			}
		}// ToObjectArray<T>()
		public static T[] ToObjectArray<T>(this List<RowStore> listOfRowStore, Func<T> objectFactory) where T : class
		{
			unchecked
			{
				var listOfRowStoreAlias = listOfRowStore;
				int newArrayLength = listOfRowStoreAlias.Count;
				T[] newArray = new T[newArrayLength];
				if (newArrayLength == 0) return newArray;

				var objectFactoryAlias = objectFactory;
				RowStore[] arrayOfRowStore = listOfRowStoreAlias.GetList_itemsArray();
				ref RowStore firstElement = ref arrayOfRowStore[0];

				var settersArray = new Action<T, object>[firstElement.RowValues.Length];

				var fieldNames = firstElement.Schema.FieldNames;
				var settersMap = ReflectionHelper_Setter<T>.Setters;
				for (int i = 0; i < fieldNames.Length; ++i)
				{
					if (settersMap.TryGetValue(fieldNames[i], out var setter))
						settersArray[i] = setter;
				}

				Parallel.For(0, newArrayLength, i =>
				{
					T objT = objectFactoryAlias();
					newArray[i] = objT;
					object[] rowValues = arrayOfRowStore[i].RowValues;

					for (i = 0; i < rowValues.Length; ++i)
					{
						settersArray[i]?.Invoke(objT, rowValues[i]);
					}//for
				});
				return newArray;
			}//unchecked