Литой (обычно) отличается от преобразования . В большинстве случаев, когда вы бросаете вещи на C #, вы предполагаете, что это уже то, что вы говорите, и вы вообще не меняете их. Существует исключение для типов значений, таких как int
«boxed» и «unboxed», когда вы отправляете их в и из object
. Однако это исключение не распространяется на листинг a Cast<>()
в a .int[] arr = ((object[])item).Cast<int>().ToArray();
Это int[]
не то же самое, что и object[]
, так что вы не можете просто бросить его как один. Вместо этого вам нужно создать новый массив (или Collection, или IEnumerable или что-то еще), который состоит из всех этих object
s unboxed в int. Один из способов сделать это - использовать метод расширения из пространства имен System.Linq.List<object[]> list = new List<object[]> { new object[] { 1, 2 }, new object[] { 3, 4 } }; foreach (object[] item in list) { if (item.GetType().IsArray) { var arr = item.Cast<int>(); foreach (var i in arr) { Console.WriteLine(i); } } }
List<object>
Или, как более полный пример:
foreach (List<object> item in list)
{
int[] arr = item.Cast<int>().ToArray();
foreach (var i in arr)
{
Console.WriteLine(i);
}
}
Обновить
Основываясь на вашем обновленном вопросе, есть вероятность, что реальное решение вашей проблемы выйдет за рамки исходного вопроса. Я не знаю, какой механизм вы используете для его хранения и извлечения из базы данных, но если вы используете что-то вроде Entity Framework, вам, вероятно, придется изменить свою модель, чтобы ее значения были строго типизированы. Фактически, то, как вы берете свойства объекта и помещаете их в базу данных в виде массива, - это большой запах кода: скорее всего, ваша модель данных должна быть сплющена в тип с именованными свойствами.
Но чтобы ответить на самую простую, самую основную часть вопроса: вы должны отбросить свои объекты к типу, который есть на самом деле , прежде чем пытаться их преобразовать. Если у вас есть array
, то используйте это:
List