none
C# : Params RRS feed

  • Вопрос

  • Почему при дебаге консоль пишет System.Int32[], а не элементы массива?

    Код:

    class Program
    {
        public static void UseParams(params object[] list)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.Write(list[i] + " ");
            }
            Console.WriteLine();
        }
        static void Main(string[] args)
        {
            int[] myIntArray = { 5, 6, 7, 8, 9 };
            UseParams(myIntArray);
            Console.ReadKey();
        }
    }

    Для начинающего.


    • Изменено Nick Mine 11 мая 2014 г. 8:31

Ответы

  • В метод UseParams вы передаёте один аргумент, причём этот аргумент не может быть неявно преобразован к типу object[], поэтому вызов UseParams(myIntArray) эквивалентен UseParams(new object[] { myIntArray }). То есть в Вашем случае параметр list — это массив из одного элемента, массива чисел. Строковое представление этого массива чисел "System.Int32[]", так как ToString у массивов не переопределён и просто выводит тип объекта.
    • Предложено в качестве ответа Petalvik 11 мая 2014 г. 18:18
    • Помечено в качестве ответа Nick Mine 12 мая 2014 г. 17:03

Все ответы

  • Кто куда выходит? Лаконичность не к месту, если хотите получить ответ. Опишите русским языком, чего Вы добиваетесь.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • В метод UseParams вы передаёте один аргумент, причём этот аргумент не может быть неявно преобразован к типу object[], поэтому вызов UseParams(myIntArray) эквивалентен UseParams(new object[] { myIntArray }). То есть в Вашем случае параметр list — это массив из одного элемента, массива чисел. Строковое представление этого массива чисел "System.Int32[]", так как ToString у массивов не переопределён и просто выводит тип объекта.
    • Предложено в качестве ответа Petalvik 11 мая 2014 г. 18:18
    • Помечено в качестве ответа Nick Mine 12 мая 2014 г. 17:03