IsMissing Support
The IsMissing function does not exist in .NET. However VBUC can support the conversion of IsMissing by implementing certain conversion patterns.
The VBUC starts by recognizing the IsMissing cases that will never return true. These cases are converted to the literal boolean “false”. Other cases are converted by using a specific conversion that provides the same behavior in .NET. It includes optional parameters to overloadings, default values deduction, specific parameter types to general types (nullable for value-types and object for references) and auxiliary local variables generation.
The following basic example illustrates this specific conversion:
Original VB6 Code:
Sub TestIsMissing(Optional i1, Optional f)
If IsMissing(i1) Then
MsgBox "i1 is Missing"
End If
If IsMissing(f) Then
MsgBox "f is Missing"
End If
End Sub
Sub Main()
Dim f As Form
TestIsMissing 1000, f
TestIsMissing 1000
TestIsMissing
End Sub
Resulting VB.NET Code:
Sub TestIsMissing(ByRef i1_optional As Nullable(Of Integer), ByRef f_optional As Object)
Dim i1 As Integer = 0
If i1_optional.HasValue Then i1 = i1_optional.Value
Dim f As Form = Nothing
If f_optional Is Nothing OrElse Not f_optional.Equals(Type.Missing) Then f = TryCast(f_optional, Form)
If Not i1_optional.HasValue Then
MessageBox.Show("i1 is Missing", Application.ProductName)
End If
If Not (f_optional Is Nothing) AndAlso f_optional.Equals(Type.Missing) Then
MessageBox.Show("f is Missing", Application.ProductName)
End If
End Sub
Sub TestIsMissing(ByRef i1_optional As Nullable(Of Integer))
Dim tempRefParam As Object = Type.Missing
TestIsMissing(i1_optional, tempRefParam)
End Sub
Sub TestIsMissing()
Dim tempRefParam2 As Nullable(Of Integer) = Nothing
Dim tempRefParam3 As Object = Type.Missing
TestIsMissing(tempRefParam2, tempRefParam3)
End Sub
Public Sub Main()
Dim f As Form
TestIsMissing(1000, f)
TestIsMissing(1000)
TestIsMissing()
End Sub
Resulting C#.NET Code:
static public void TestIsMissing( int? i1_optional, object f_optional)
{
int i1 = ((i1_optional == null) ? 0: i1_optional.Value);
Form f = ((f_optional == Type.Missing) ? null: f_optional as Form);
if (i1_optional == null)
{
MessageBox.Show("i1 is Missing", Application.ProductName);
}
if (f_optional == Type.Missing)
{
MessageBox.Show("f is Missing", Application.ProductName);
}
}
static public void TestIsMissing( int? i1_optional)
{
TestIsMissing(i1_optional, Type.Missing);
}
static public void TestIsMissing()
{
TestIsMissing(null, Type.Missing);
}
static public void Main()
{
Form f = null;
TestIsMissing(1000, f);
TestIsMissing(1000);
TestIsMissing();
}