2010-05-14 2 views
2

Я не хочу войны между разработчиками VB.NET и C#, и моя цель - открыть конфронтацию C# VS VB.NET.Какие функции сильно используются в C# 2.0, но недоступны в VBNET 2.0, и как обходным путем?

Я хотел бы, чтобы вы все перечислить особенность, которая широко используется в C#, но не доступен в VB.NET 2.0, и как бы вы работать вокруг, чтобы достичь такого же поведения или цели?

Например:

C#

Принимает недействительные (Обратно) лямбда-выражения. Вот пример с отображением FNH:

Component(x => x.Address, m => { 
    m.Map(x => x.Number); 
    m.Map(x => x.Street); 
    m.Map(x => x.PostCode); 
}); 

Это невозможно сделать, прежде чем VB.NET 4.0 (должны быть выполнимыми в VB.NET 4.0)

VB.NET

должны написать метод помощи (Sub) и предоставить этот метод AddressOf для обхода.

Private Sub Helper(ByVal m As MType) 
    m.Map(Function(x) x.Number) 
    m.Map(Function(x) x.Street) 
    m.Map(Function(x) x.PostCode) 
End Sub 

... 
Component(Function(x) x.Address, AddressOf Helper) 

Теперь я знаю, что это не VB.NET 2.0, но это пример. VB.NET 3.0 и 3.5 тоже могут использоваться. Пожалуйста, просто укажите, к какой версии VB.NET это относится.

+0

Вы ограничиваете его VB.Net 2.0, но как насчет C# ?? Любая версия или версия 2.0 тоже? –

+0

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

+0

Вы, на самом деле, не очень справедливое сравнение, так как вы не могли сделать свой пример C# до тех пор, пока .net 3.5 –

ответ

4

Вы можете проверить wiki для сравнения. См. Разделы «Возможности Visual Basic .NET, не найденные в C#» и «Возможности C#, не найденные в Visual Basic .NET».

+0

Спасибо! Я не знал об этом. Представляют ли они обходные пути? –

+0

Ссылка довольно интересная! =) –

+0

Да, они не перечисляют обходные пути для любого из них. Некоторые из них не будут иметь обходные пути, такие как многострочные комментарии (за исключением использования только одной строки комментариев назад). – SwDevMan81

7

Блоки итераторов (выход доходности/выходный разрыв), вероятно, самый большой.

+0

Спасибо! Будет ли обходной путь? –

+1

Обходным путем является кодирование классов IEnumerable или IEnumerator вручную. –

+0

Спасибо, Брайан! =) –

1

Для меня то, что я пропускаю это неявные определения интерфейсов:

ISomething 
{ 
    void Execute(); 
} 

class ASomething : ISomething 
{ 
    public void Execute() 
    { 
    //Do something 
    } 
} 

отлично. В VB.net вы должны явно отметить метод как реализацию интерфейса, который я считаю довольно неприятным. Я знаю, что есть люди, которые предпочитают эту технику, но не для меня ...

+1

Это то, чего я тоже скучаю! Мне потребовалось время, чтобы привыкнуть к этому. Время от времени, просто нажмите [Enter], когда Implements IInterface сообщается как ошибка, тогда он автоматически реализует интерфейс, записывая каждый «Implements IInterface.Member». Случайно это существует! В противном случае это было бы болью! Но ты прав. знак равно –

1

Небезопасный код с помощью ключевого слова unsafe не разрешен в VB.NET. Нет обходного пути. Но, честно говоря, я никогда не использовал эту функцию. Если я столкнулся с ситуацией, для которой обычно требуется эта функция, я обычно пинаю и двигаюсь прямо к C++/CLI.

Смежные вопросы