Хобрук: Ваш путь к мастерству в программировании

Использование ключевого слова params с многомерным массивом

Почему это ошибка времени компиляции, когда мы используем ключевое слово params с многомерным массивом?

using System;

namespace Testing_Params_Keyword
{
    class Program
    {
        static void Main(string[] args)
        {
            //Calculate in invoked
            Calculate(25.4, 26.2, 27.8, 28.9);
        }

        //Declearing Calculate method
        public static void Calculate(params float [ , ] Money)//----** Here is error **
        {
            //Divide values of column1 by column2
            float row1 = Money[0, 0] / Money[0, 1];
            float row2 = Money[1, 0] / Money[1, 1];

            Console.WriteLine(row1 + row2);
        }//end of method Calculate
    }
}

Выдает мне ошибку

Параметр params должен быть одномерным массивом.

Почему это должен быть одномерный массив?


  • Потому что параметр params должен быть одномерным массивом. 03.06.2016
  • Почему это должен быть одномерный массив? 03.06.2016
  • Итак, это новый вопрос, вы можете обновить свой пост? 03.06.2016
  • вместо этого вы можете использовать собственный класс с параметрами в нем и использовать эту функцию со списком «ваш класс» 03.06.2016
  • Как именно вы ожидаете, что код будет определять допустимые размеры массива? 03.06.2016
  • По моему мнению, компилятору необходимо определить размер массива по размеру внутри объявления метода. 03.06.2016

Ответы:


1

params - это не передача многомерных данных, а передача переменного количества аргументов функциям. Поскольку этот список аргументов по своей сути является одномерным, поэтому тип должен быть одномерным массивом.

03.06.2016

2

Потому что все, что делает компилятор C#, пусть и волшебно, должно иметь за собой какую-то логику. Ключевое слово params просто создает массив, размер которого равен количеству переданных вами параметров. Это то, что может установить компилятор. Однако он не может вывести количество измерений, которые вы намереваетесь, или даже количество элементов на измерение. Следовательно, то, что вы пытаетесь сделать, никогда не может быть скомпилировано.

03.06.2016

3

Это связано с тем, что переменная params основана на аргументах командной строки, где команда запускается после нажатия клавиши ввода. Этот метод не допускает множественных измерений и, следовательно, отражается в переменной, так как компилятор понимает это.

03.06.2016
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..