Почему мой - наконец блок, не работающий в C#?

Я нашел решение. Я не знаю, столкнусь ли я позже с проблемами!

A=np.array([(150,"A"),(30,"B"),(9,"14")], dtype='object')
c=np.argmax(A, axis=0)
6
задан Community 23 May 2017 в 12:04
поделиться

6 ответов

Да, наконец блок бежит за функциональными возвратами, но это не имеет значения. Помните, что возвращаемое значение передается значением, таким образом, новая временная переменная создается для него во время возврата, таким образом наконец, блок не делает ничего для влияния на фактическое возвращаемое значение. Если Вы хотите поддерживать желаемое поведение, Вы могли бы использовать параметр, как так:

static void Main(string[] args)
{
    string answer;
    Sample(out answer);
    Console.WriteLine(answer);
}

public static void Sample(out string answer)
{

    try
    {
        answer = "abc";
        return;
    }

    catch (Exception)
    {
        throw;
    }

    finally
    {
        answer = "def";
    }
}

Или, Вы могли просто переместить оператор возврата за пределами блока попытки, как так:

static void Main(string[] args)
{
    string answer = Sample();
    Console.WriteLine(answer);
}

public static string Sample()
{
    string returnValue;
    try
    {
        returnValue = "abc";
    }

    catch (Exception)
    {
        throw;
    }

    finally
    {
        returnValue = "def";
    }

    return returnValue;
}

Однако, учитывая, что наконец блок будет всегда переопределять возвращаемое значение, это - сомнительный дизайн.

3
ответ дан 8 December 2019 в 13:02
поделиться

Ваш "наконец" блокируются, присваивает значение returnValue и не на самом деле возвращает значение. "Возврат" уже произошел, перед наконец блок изменяет значение, и поэтому "abc" возвращается.

Пока код сбивает с толку как, что Вы сделали, не имеет смысла, что он делает, корректно.

12
ответ дан 8 December 2019 в 13:02
поделиться

finally блок эффективно бежит return оператор. Таким образом, Вы уже возвратили старое значение abc перед входом в Ваш наконец блок.

(это не точно, как работы под капотом, но это достаточно близко для точки здесь),

3
ответ дан 8 December 2019 в 13:02
поделиться

Я не эксперт, но я должен был бы предположить, что эта функция возвращается и затем вызывает наконец. С тех пор return returnValue был уже выполнен, действительно не имеет значения, что значение returnValue берет в наконец блок. Это поведение отчасти имеет смысл, потому что это, как предполагается, выполняет весь блок попытки перед наконец блок и единственный способ, которым это может сделать, который является, если это возвращается из функции как свое воображаемое к.

0
ответ дан 8 December 2019 в 13:02
поделиться

Если Вам действительно любопытно относительно того, что продолжается, то можно загрузить и установить Отражатель. Это - фантастический инструмент для помещения в 'сумку o приемов'. Это скажет Вам, что продолжается под капотом.

0
ответ дан 8 December 2019 в 13:02
поделиться

В предположении я сказал бы, что Вы определяете то, что будет возвращено (ссылка на строку "abc") в точке, где оператор возврата.

Так то, что наконец более поздние наборы, что ссылка для обращения к другой строке не имеет никакого эффекта на возвращенное значение.

0
ответ дан 8 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: