Инициализировать переменную int до минус единицы в C#

Я наткнулся на код, в котором переменные инициализируются на минус один. Это в каком-то старом коде, есть ли за этим какая-то причина? Потому что, насколько мне известно, все типы значений инициализируются нулем.

Я протестировал код, и он ничего не меняет, чтобы оставить переменную int неинициализированной или с минусом, результат тот же. Не могли бы вы просветить меня?

class Program
{
    static void Main()
    {
        SampleDelegate del = new SampleDelegate(SampleMethodOne);
        del += SampleMethodTwo;
        int Number = -1; //or -> int Number;
        int returnedValue = del(out Number);

        Console.WriteLine("returnedValue = {0}", returnedValue);
        Console.ReadLine(); 
    }

    public static int SampleMethodOne(out int Number)
    {
       return Number = 1;
    }
    public static int SampleMethodTwo(out int Number)
    {
        return Number = 3;
    }
 }

public delegate int SampleDelegate(out int Number);

/returns 2

Я что-то упускаю? Где -1? В любом случае, вам, вероятно, придется просто спросить человека, создавшего код, почему он принял это решение, велики шансы, что есть причина, и мы никогда ее не узнаем. Лучше всего предположить, что 0 имеет значение.

gilliduck 19.09.2018 16:54

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

Diado 19.09.2018 16:54

Что ж, вы сами уже упомянули разницу, и это, вероятно, было причиной использования -1: оно отличается от значения по умолчанию, поэтому вы знаете, когда значение изменилось на 0. Я также предполагаю, что отрицательные значения невозможны, но 0 действителен .

Tim Schmelter 19.09.2018 16:55

Довольно бессмысленно инициализировать переменную параметра out значением любой, потому что контракт для параметра out гарантирует, что метод установит значение - инициализированное значение отбрасывается. Также кажется странным, что метод возвращает параметр out; это как дважды передать значение вызывающей стороне. Я предполагаю, что тот, кто написал этот код, на самом деле не знал, что они делают, и что это не лучший пример для обучения программированию.

Rufus L 19.09.2018 17:05

Код, который вы разместили, предназначен только для примера вашей проблемы или это фактический код?

Mikitori 19.09.2018 17:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
307
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TL; DR: как бывает, может и нет ответа

Вариант ответа:

  1. Инициализация переменной лучше. вы никогда не знаете, как его можно использовать в некоторых более поздних функциях, где неожиданное значение может быть опасным (когда код оптимизирован, вы не можете быть уверены в значении по умолчанию, если оно не инициализировано).

  2. В некоторых случаях int может использоваться в API по какой-либо причине совместимости, когда вам просто нужен uint. В таком случае инициализация отрицательным значением может быть простым способом обнаружения неустановленного / недопустимого значения.

  3. Никакой реальной причины, просто привычка от разработчика. Согласен с комментариями, по возможности спроси у него

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

Abdel Selmoun 20.09.2018 11:59

Другие вопросы по теме