I have been working with VB.NET a lot recently and as I haven’t used it in many years ran into a whole heap of differences between it and C#. So to help with this I have created a cheat sheet of how to do different things between c# and VB.NET. I will keep adding stuff to this as I find them.

Comments

c#:

// line comment

/* 
block comment
*/

VB.NET:

' line comment
rem line comment

Hex Literals:

C#:

var x = 0xAB;

VB.NET:

Dim x = &HAB 

VAR:

C#:

//Variable names in C# are case sensetive
var foo = new List<int>();

VB.NET:

'Variable names in vb.net are not case sensitive
Dim foo = new List(of int);
Dim foo as new List(of int);

Event Listeners:

C#:

//Declare event
public event EventHandler<bool> MyEvent;

//Raising event
MyEvent(this, false);

//Adding handler to event
obj.MyEvent += myHandlerFunction;

VB.NET

'Declare event
Event AnEvent(ByVal EventNumber as Integer)

'Raising events
RaiseEvent AnEvent(Number)

'Declaring object with events
Dim WithEvents MyObject As New EventClass

'Declare method to handle events
Sub MyEventHandler() Handles MyObject.EventName

Lambdas:

c#:

var foo = (x) => x * 2;

VB.NET:

Dim foo = Function(x) x * 2

Multiline:
Dim foo = Function(x)
		Return x * 2
	        End Function

Extension Methods:

c#:

Public static class MyExtensionMethods
{
	Public static void MyExtensionMethod(this string target, int index) 
	{
		//Do stuff here
	}
}

VB.NET:

Module MyExtensionMethods
	
	Public sub MyExensionMethod(string target, int index)
		'Do stuff here
	End Sub
End Module

Properites:

C#:

//Auto property
Public string Foo {get; set;}

//Property
Public string Foo 
{
	Get
	{
		return "bar"
	}
	
	Set
	{
		m_foo = value
	}
}

//Read only property
Public string Foo {get;}

VB.NET:

'Auto Property
Public property foo as string

'Property
Public property foo as string
	Get
		return "foo"
	End Get
	Set(value as string)
		m_foo = value
	End Set
End Property

'Read only property
Public readonly property Foo
	Get
		return "foo"
	End Get
End Property