(0 == переменная) или (пустой указатель == obj): устаревшая практика в C#? [дубликат]

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

Dim varbin As Byte() = BitConverter.GetBytes(houseid)
obj = objCon.CreateCommand()
strSQL = "insert into " & tbl & " (hello, HOUSE_ID, world) VALUES (@hello, @varbin, @world);"
obj.Parameters.Add("@hello", SqlDbType.VarChar, 50).Value = hello
obj.Parameters.Add("@varbin", SqlDbType.VarBinary, 50).Value = varbin
obj.Parameters.Add("@world", SqlDbType.VarChar, 50).Value = world
obj.CommandText = strSQL
obj.ExecuteNonQuery()

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

4 ответа

Нет, нет никакой потребности в этом, потому что проблема это старается избегать - а именно, опечатка:

if (variable = 0)

не скомпилировал бы в C# так или иначе. Условия в if операторы должны быть булевской переменной. Существует все еще риск создания одной из этих ошибок:

if (something = true)
if (something = false)

если something Логическая переменная, но лучший способ зафиксировать это состоит в том, чтобы избежать константы:

if (something)
if (!something)

Если у Вас есть разработчики, приносящие по идиомам как это с других языков, не думая о том, являются ли они соответствующими в C#, необходимо бдительно следить для них делающий больше того же. При попытке записать C#, как будто это - C++ (или любой другой язык, в значительной степени - за возможным исключением из VB.NET) Вы закончите тем, что писали неидиоматический код C#.

Править: Как cletus отмеченный, существует другая потенциальная область для беспокойства:

bool a = false, b = true; 
if (a = b) { } // No warnings

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

21
ответ дан 3 November 2019 в 12:50
поделиться

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

if(status = RED_ALERT)
{
    launchMissiles();
}
10
ответ дан 3 November 2019 в 12:50
поделиться

Я подозреваю, что это - оставшаяся привычка. В C:

 if (0 = variable)

бросит ошибку компилятора тогда как

 if (variable = 0)

не будет.

5
ответ дан 3 November 2019 в 12:50
поделиться

Это не нужно для C#. Но Это - все еще хорошая идея.

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

0
ответ дан 3 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

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