Slazem se, koriscenje On Error Resume Next je najgora stvar koju mozes da uradis u VB.NET-u, i ne postoji nacin da ga implementiras u C# jer je koriscenje istog kompajlerska logika VB.NET kompajlera. Eventualno mozes da simuliras desavanja, ali to ti ne preporucujem, pogledaj sledeci metod iz VB.NETa i pogledaj kako izgleda taj kod kad se iz MSIL-a prebaci u C#:
Code:
VBNET
Sub Main()
On Error Resume Next
Dim c As Integer = 0
Dim x As Integer = 12 / c
If Err.Number <> 0 Then
Console.WriteLine("Greska")
End If
End Sub
izgleda benigno, zar ne, pogledaj sad kako nakazno izgleda C# implementacija toga

Toliko o strukturalnom programiranju, a kamoli OOPu
Code:
[STAThread]
public static void Main()
{
int VB$ResumeTarget;
try
{
int VB$CurrentStatement;
Label_0001:
ProjectData.ClearProjectError();
int VB$ActiveHandler = -2;
Label_0009:
VB$CurrentStatement = 2;
int c = 0;
Label_000E:
VB$CurrentStatement = 3;
int x = (int) Math.Round((double) (12.0 / ((double) c)));
Label_0024:
VB$CurrentStatement = 4;
if (Information.Err().Number == 0)
{
goto Label_004B;
}
Label_003D:
VB$CurrentStatement = 5;
Console.WriteLine("Greska");
Label_004B:;
goto Label_00C3;
Label_0051:
VB$ResumeTarget = 0;
switch ((VB$ResumeTarget + 1))
{
case 1:
goto Label_0001;
case 2:
goto Label_0009;
case 3:
goto Label_000E;
case 4:
goto Label_0024;
case 5:
goto Label_003D;
case 6:
goto Label_004B;
case 7:
goto Label_00C3;
default:
goto Label_00B8;
}
Label_007D:
VB$ResumeTarget = VB$CurrentStatement;
switch (((VB$ActiveHandler > -2) ? VB$ActiveHandler : 1))
{
case 0:
goto Label_00B8;
case 1:
goto Label_0051;
}
}
catch (object obj1) when (?)
{
ProjectData.SetProjectError((Exception) obj1);
goto Label_007D;
}
Label_00B8:
throw ProjectData.CreateProjectError(-2146828237);
Label_00C3:
if (VB$ResumeTarget != 0)
{
ProjectData.ClearProjectError();
}
}