Край C# по [закрытому] VB

Вы можете использовать coalesce() , чтобы вернуть другое значение, если столбец null

select coalesce(the_column, 'x') as the_column
from the_table;

11
задан tshepang 21 May 2014 в 16:09
поделиться

19 ответов

C# и VB являются в основном тем же однако существуют некоторые незначительные различия. Кроме очевидных различий в грамматике у Вас есть следующие различия:

  1. C# может назвать небезопасный код
  2. VB имеет дополнительные параметры (Прибывающий в C#4.0)
  3. VB легче использовать при совершении поздно связанных вызовов (Прибывающий в C# 4.0), Это и число делают 2, делают использование VB, чтобы сделать автоматизацию делопроизводства, намного более чистую.
  4. VB имеет набор функций "помощника" и класса как Мое пространство имен; однако, все это доступно для C#
  5. VB нечувствителен к регистру

Синтаксис C# следует за подобной грамматикой к c и Java, которые делают это намного более удобным переходом от тех языков, где, поскольку VB может быть более удобен для пользователей VB. Как далекая производительность, и библиотеки или компоненты они почти идентичны.

Что касается которого выбрать, если у Вас нет потребности сделать небезопасные операции, затем выбрать язык, который является самым естественным для Вас. После лет того, чтобы быть разработчиком VB я любил не иметь необходимость записать Если yadada затем..... Конец, Если, если (yadaya) {....} Сохраняет мой кистевой туннель несколько дополнительных нажатий клавиш (Который может затем использоваться при ответе ТАК на вопросы),

Править

Просто изученный еще одно различие btw C# и VB - то, что VB поддерживает фильтрованные исключения, таким образом, Вы могли что-то вроде этого псевдо:

try
{
   //do something that fails
}
catch(Exception ex when ArgumentException, 
      ArgumentNullException, FormatException)
{
  //Only handle these three types
}

Это не должно быть перепутано со способностью сделать:

try
{ 
    //something that fails
}
catch(ArgumentException)
{ 
    //Log Error
}
catch(ArgumentNullException)
{
    //Log Error
}

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

Править

Еще некоторые различия.

  1. Оператор Is VB сравнивает два объекта определить, являются ли они тем же, это компилирует в инструкцию IL CEQ, где, поскольку C# компилирует в isinst IL. Так следующее эквивалентные операторы

c# if (foo is FooObject){}

vb If TypeOf foo is FooObject then

  1. Также, как упомянуто в комментариях и мне жаль, что я не видел их, чтобы дать Вам кредит, но C# не имеет подобного параметра. Необходимо использовать класс RegEx.
33
ответ дан 3 December 2019 в 00:37
поделиться

Лишенный старого хлама, объявление массива в C# не дополнено дополнительным элементом. массив VB.NET дополнен дополнительным элементом, столь миграция кода VB6 прежней версии легче.

C# более последователен, чем VB.NET

Button1.Color() = Color.Red
Button1.Color = Color.Red

Я не могу дать ответ, когда один студент спросил меня, когда использовать круглую скобку на свойствах VB.NET. Трудно дать проницательное обоснование для этого вида ошибки.

Непротиворечивость с экземпляром и статическими участниками. VB.NET позволяет получать доступ к статическим участникам на экземпляре, например, пряже. Сон (1000), это - ошибка. https://stackoverflow.com/questions/312419/language-features-you-should-never-use

0
ответ дан 3 December 2019 в 00:37
поделиться

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

Это решено в VB.Net 10.0.

0
ответ дан 3 December 2019 в 00:37
поделиться

Я должен сказать, что это был мой опыт при использовании Google для поиска примеров или документации, что примеры C# имеют лучшее качество, чем примеры VB. Это не должно говорить, что нет плохих примеров C#, но если Вы ищете что-то как "словарь выпадающее" добавление, что C# предоставит лучший качественный ответ выше в списке.

Это не относится к примерам, которые отображают и C# и код VB рядом.

1
ответ дан 3 December 2019 в 00:37
поделиться

Вот другой вопрос, еще не отвеченный в этом следе:

Более высокая степень возможности трудоустройства + лучше (больше) ресурсы Dev

Теперь я не соглашаюсь с этой точкой зрения однако:

Существует больше магазинов C# dev это магазины VB

Некоторые назад c# работодатели поместят Вас в серьезный недостаток, если Вы будете более сильными с VB. Таким образом, возможно, C# является лучшим выбором здесь.

На обороте, когда Вы идете для найма людей для проекта C#, Вы сможете притянуть больше кандидатов к iterview и получить лучшие навыки в результате – я не думаю, что деталь должна быть пропущена.

1
ответ дан 3 December 2019 в 00:37
поделиться

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

Инструменты поддержки

Существуют однако также различия в том, как Visual Studio обрабатывает эти языки. Фрагменты кода легче использовать от редактора C#, и рефакторинг лучше также.

VB-редактор упрощает intellisense, не показывая все варианты в любом случае.

Я уверен, что существует больше вещей, но это - те, что я как C#'er (выполнение очень небольшого количества VB) заметил.

1
ответ дан 3 December 2019 в 00:37
поделиться

Начиная с C# и VB.Net обе компиляции в MSIL, у обоих есть почти идентичная Производительность, Возможности, Библиотеки и Компоненты. Отражение может deassemble код MSIL или в C# или в VB.NET (или много других языков)

Это в основном оставляет нас с, C# много походит на Java и C++, который дает ему больше доверия.

1
ответ дан 3 December 2019 в 00:37
поделиться

Насколько я понимаю существуют различия между языками, хотя они минимальны. Я предложил бы работать с языком, с которым Вы/Ваши разработчики будете чувствовать себя больше всего комфортно. Если бы у них уже есть опыт VB затем, я предложил бы VB.Net/vice-versa.

Хотя я предпочитаю краткий синтаксис C# лично.:)

1
ответ дан 3 December 2019 в 00:37
поделиться

Производительность?

Никакое различие, хотя VB исторически использует странную индексацию в циклах, что означает, что необходимо вычесть 1 из самого высокого индекса большую часть времени:

For i = 0 To someArrayOrString.Length - 1 …

Хотя я сомневаюсь, что это влияет на производительность любым измеримым способом.

С другой стороны, из-за фоновой компиляции, VB на самом деле компилирует по-видимому быстрее. Некоторые люди утверждают, что это заставляет IDE реагировать вяло, но я никогда не замечал что сам.

Возможности?

В нескольких экземплярах, C# yield оператор действительно полезен. VB требует большего физического труда здесь. Кроме того, лямбды намного лучше реализованы в C#, особенно синтаксически. Рассмотрите эти два оператора:

Parallel.For(1, 10000, i => {
    // Do something
});

по сравнению с

Parallel.For(1, 10000, Sub() _
    ' Do something '
End Sub)

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

Библиотеки/Компоненты?

Идентичный.

Репутация?

Не важный. “Уважение”?Прошу прощения. Не фактор. Преобладайте над ним, Nick.

Надежность? Пригодность для обслуживания? Простота?

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

2
ответ дан 3 December 2019 в 00:37
поделиться

В C# можно иметь более точно настроенный контроль над событиями/делегатами. Но Вам редко нужно это.

Существует намного больше примеров кода для C#.

В VB.Net (намного) легче использовать позднее связывание. Например, к COM-объектам (в C# от версии 4.0).

  • Я использую C# для 90% в моих проектах
  • Я использую VB.Net для interop к Excel и т.д.

Как только я знаю F# лучше, я буду, вероятно, использовать его для частей, для которых лучше подходит F#.

2
ответ дан 3 December 2019 в 00:37
поделиться

VB имеет лучшую обратную связь на ошибках. В C# необходимо скомпилировать чаще для получения всех ошибок в синтаксисе.

3
ответ дан 3 December 2019 в 00:37
поделиться

Моей любимой функцией C#, который не имеет VB, является оператор урожая. Это позволяет Вам легко возвратить лениво оцененный IEnumerable из метода.

Вот статья, которая касается его: http://msdn.microsoft.com/en-us/magazine/cc163970.aspx

3
ответ дан 3 December 2019 в 00:37
поделиться

В ранних версиях VB.NET различие было более очевидным, однако с текущей версией, нет никаких существенных различий.

VB поддерживает литералы XML непосредственно в коде, который не поддерживается C#. C# поддерживает небезопасный код, и VB не делают. Технически эти два являются самыми большими различиями. Существует много маленьких изменений, но они не важны. Мне нравится C# больше, потому что я думаю, что синтаксис намного менее чрезмерно увеличен в размере. Легко распознать блоки кода вместо того, чтобы видеть набор ключевых слов, но это - чистое персональное предпочтение.

Выберите тот, с которым Вы и Ваша команда более знакомы.

5
ответ дан 3 December 2019 в 00:37
поделиться

При ударе проблемы Вы будете часто мочь к Google для примера кода, который показывает, как решить его в минутах. Это - значимый фактор в улучшающейся производительности. Когда я работал с Delphi, я должен был преобразовать примеры кода из C в Object Pascal - выполнимый, но утомительный, т.е. большое трение. Не недооценивайте факт это...

Подавляющее большинство примеров кода .NET находится в C#!

9
ответ дан 3 December 2019 в 00:37
поделиться

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

VB9 имеет:

  • Литералы XML
  • Изменяемые анонимные типы (urgh)
  • Больше поддержки LINQ на языке (C# только покрывает несколько операторов),
  • Целый набор дополнительных битов на языке, который компилируется вниз в вызовы к Microsoft. Блок VisualBasic. (C# предпочитает быть маленьким языком с весом платформы.NET позади него.)
  • Литералы DateTime

C# 3 имеет:

  • Лучшая поддержка лямбда-выражений: IIRC, Вы не можете записать лямбда-выражение с телом блока в VB.
  • Блоки итератора.
  • Синтаксис для дополнительных методов (вместо того, чтобы украсить метод атрибутом)

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

11
ответ дан 3 December 2019 в 00:37
поделиться

Уважение среди фанатов.

(И не притворяйтесь, что это не важно!)

15
ответ дан 3 December 2019 в 00:37
поделиться

VB.Net имеет корневое пространство имен, и C# имеет пространство имен по умолчанию, которое не является тем же. Поскольку, когда у Вас будет корневое пространство имен в VB.Net, он будет всегда добавлять что перед пространством имен.

Например: если у Вас есть rootnamepsace в VB.Net, названном namespace1, и затем Вы добавляете это к своему файлу.

Namespace namespace1
  Public Class class1
  End Class
End Namespace

затем необходимо будет обратиться к нему как namespace1.namespace1.class1

в C#, если у Вас есть пространство имен по умолчанию, названное namespace1 и Вами это в Вашем файле.

namespace namespace1{
  public class class1{}
}

Затем можно все еще просто обратиться к нему как namespace1.class1

4
ответ дан 3 December 2019 в 00:37
поделиться

Я думаю, что это сообщение в блоге Kathleen Dollard предоставляет превосходный обзор вопросу:

Какой кодер C# должен знать, прежде чем они запишут VB

и ее первый совет:

1) Преобладайте над вещью уважения или выйдите перед запуском. VB является большим языком.

21
ответ дан 3 December 2019 в 00:37
поделиться

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

Даже если Вы будете повседневно писать в VB.NET, то необходимо будет все еще смочь считать C#

Технически, они совместно используют ту же платформу с той же производительностью и характеристиками памяти и теми же системами типов, таким образом, мне трудно трудно для разделения двух.

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

Мое ядро frustaration находится с сотнями времени, которое я записал:

String lastName as String

и задался вопросом, почему это никогда не компилирует!

3
ответ дан 3 December 2019 в 00:37
поделиться