Я должен всегда/когда-либо/никогда инициализировать поля объекта к значениям по умолчанию?

Ваша наиболее вероятная проблема в том, что вы забыли вызвать метод DataTables draw после добавления строки в таблицу. Вы можете попробовать изменить свой код, например, так:

dt.row.add(['',
    v.id,
    v.name,               
    '']).draw(false);
    }).draw();

Вот ссылка о том, как добавлять новые строки в DataTable таблицы.

Также читайте о функции draw здесь . Он имеет один входной параметр, и в зависимости от этого таблица будет перерисовываться по-разному. Исходя из вашего вопроса, я не могу решить, какой параметр вы должны использовать для таблицы draw.

33
задан Community 23 May 2017 в 11:46
поделиться

16 ответов

Думайте долгосрочное обслуживание.

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

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

24
ответ дан 27 November 2019 в 18:26
поделиться

Я не инициализировал бы их. Если Вы сохраняете объявление максимально близко к первому использованию, то не должно быть никакого беспорядка.

0
ответ дан 27 November 2019 в 18:26
поделиться

Это отмечено как агностик языка, но большинство ответов расценивает C#.

В C и C++, лучшая практика к всегда , инициализируют Ваши значения. Существуют некоторые случаи, где это будет сделано для Вас, такие как статический globals, но не должно быть хита производительности никакого вида для того, чтобы избыточно инициализировать эти значения с большинством компиляторов.

0
ответ дан 27 November 2019 в 18:26
поделиться

Я не сделал бы этого. C# инициализирует интервал для обнуления так или иначе, таким образом, эти две строки функционально эквивалентны. Каждый просто длиннее и избыточен, хотя более описательный программисту, который не знает C#.

0
ответ дан 27 November 2019 в 18:26
поделиться

Я обычно делаю это для строк и в некоторых случаях наборов, где я не хочу, аннулирует плавание вокруг. Общее согласие, где я работаю, не состоит в том, чтобы "Сделать этого явно для типов значения".

0
ответ дан 27 November 2019 в 18:26
поделиться

Необходимо сделать это, нет никакой потребности к, но лучше, если Вы делаете так, потому что Вы никогда не знаете, инициализирует ли язык, который Вы используете, значения. Путем выполнения его самостоятельно, Вы удостоверяетесь, что Ваши значения и инициализируются и с предопределенным набором значений стандарта. Нет ничего неправильно при выполнении его кроме, возможно, небольшого количества 'потраченного впустую времени'. Я рекомендовал бы это сильно. В то время как рекомендование John довольно информативно, на общем использовании лучше пойти безопасный путь.

0
ответ дан 27 November 2019 в 18:26
поделиться

В случае, где я не могу сразу установить его на что-то полезное

int myValue = SomeMethod();

, я установлю его на 0. Это больше, чтобы избежать необходимости думать о том, чем значение было бы иначе. Для меня то, что целые числа всегда устанавливаются на 0, не находится на подсказке моих пальцев, поэтому когда я буду видеть

int myValue;

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

int myValue = 0;

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

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

1
ответ дан 27 November 2019 в 18:26
поделиться

Я соглашаюсь с Вами; это может быть подробным, но мне нравится видеть:

int myBlorgleCount = 0;

Теперь, я всегда начальная буква представляет в виде строки хотя:

string myString = string.Empty;

(я просто ненавижу пустые строки.)

2
ответ дан 27 November 2019 в 18:26
поделиться

Я думаю, что это должно быть сделано, если это действительно помогает сделать код более понятным.

, Но я думаю, что это - общая проблема со всеми функциями языка. Мое мнение об этом: , Если это - официальная функция языка, можно использовать его. (Конечно, существуют некоторые антифункции, которые нужно использовать с осторожностью или избежать вообще, как отсутствие option explicit в Visual Basic или ромбовидном наследовании в C++)

был я время, когда я был очень параноиком и добавил все виды ненужных инициализаций, явных бросков, Гјber-параноидальной попытки наконец блоки... Я когда-то даже думал об игнорировании автоупаковки и замене всех случаев с явными преобразованиями типов, просто "быть на безопасной стороне".

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

Помните: это только волшебно, пока Вы не понимаете это:)

4
ответ дан 27 November 2019 в 18:26
поделиться

Я думаю, что имеет смысл инициализировать значения, если это разъясняет намерение разработчика.

В C#, нет никаких издержек, поскольку значения все инициализируются так или иначе. В C/C++ неинициализированные значения будут содержать значения мусора / неизвестные значения (независимо от того, что было в ячейке памяти), таким образом, инициализация была более важной.

4
ответ дан 27 November 2019 в 18:26
поделиться

Вы всегда в безопасности в принятии работ платформы путем, платформа работает. Платформа.NET инициализирует все поля к значениям по умолчанию. Если Вы видите поле, которое не инициализируется кодом, это означает, что поле инициализируется CLR, не, что это является неинициализированным.

Эта озабоченность является обоснованной для платформ, которые не гарантируют инициализацию, но не здесь. В.NET, чаще указывает на незнание от разработчика, инициализация размышления необходима.

<час>

Другое ненужное похмелье от прошлого следующее:

string foo = null;
foo = MethodCall();

я видел, что от людей, которые должны знать лучше.

13
ответ дан 27 November 2019 в 18:26
поделиться

Я думаю, что многое из этого сводится к прошлым опытам.

На более старых и unamanged языках, ожидание состоит в том, что значение неизвестно. Это ожидание сохраняется программистами, происходящими из этих языков.

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

На данный момент, я думаю, что это прекрасно подходит для инициализации значения; что было, как только неявный становится явным. В конечном счете, скажем, за следующие 10 - 20 лет, люди могут начать узнавать, что значение по умолчанию возможно, ожидается и известное - особенно, если они остаются последовательными через языки (например, пустая строка для строк, 0 для численных данных).

0
ответ дан 27 November 2019 в 18:26
поделиться

Another thing to remember is, if you are gonna use automatic properties, you have to rely on implicit values, like:

public int Count { get; set; }
0
ответ дан 27 November 2019 в 18:26
поделиться

По своему опыту я обнаружил, что явная инициализация локальных переменных (в .NET) добавляет больше беспорядка, чем ясности.

С другой стороны, переменные класса должны всегда инициализироваться. Раньше мы определяли общесистемные пользовательские «нулевые» значения для общих типов переменных. Таким образом, мы всегда могли знать, что было неинициализировано из-за ошибки, а что было инициализировано специально.

1
ответ дан 27 November 2019 в 18:26
поделиться

Я всегда явно инициализирую поля в конструкторе. Для меня это место, где это можно сделать.

1
ответ дан 27 November 2019 в 18:26
поделиться
Другие вопросы по тегам:

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