Question

How does VB.NET calculate the length of a method? How can I do this in C#?

This my VB.NET code:

Private Function ZeroPad(ByRef pNumber As Integer, ByRef pLength As Integer) As String
    Dim Padding As Object
    If IsNumeric(pNumber) And IsNumeric(pLength) Then
        Padding = New String("0", pLength)
        ZeroPad = Padding & CStr(pNumber)
        ZeroPad = Right(ZeroPad, pLength)
    Else
        ZeroPad = CStr(pNumber)
    End If
End Function

I converted into C# as follows:

private string ZeroPad(ref int pNumber, ref int pLength) {
    object Padding;
    if ((IsNumeric(pNumber) && IsNumeric(pLength))) {
        Padding = new string("0", pLength);
        return (Padding + pNumber.ToString());

        ZeroPad = ZeroPad.Substring((ZeroPad.Length - pLength));

        // In the above line, how can I take the length of a method in C#?
    }
    else {
        return pNumber.ToString();
    }
}
Was it helpful?

Solution

You are probably confused between the variable ZeroPad and the method ZeroPad. It is customary to write variable names with a lower case initial character, e.g. zeroPad. To return a value from a method, use return in C#. I'm not sure what the purpose is of your IsNumeric subroutine or why you take value by reference, but your code in C# would be similar to:

private string ZeroPad(ref int pNumber, ref int pLength)
{
    string padding;
    string zeroPad;
    if ((IsNumeric(pNumber) && IsNumeric(pLength)))
    {
        padding = new string('0', pLength);
        zeroPad = (padding + pNumber.ToString());

        zeroPad = zeroPad.Substring((zeroPad.Length - pLength));
    }
    else
    {
        zeroPad = pNumber.ToString();
    }
    return zeroPad;
}

As you don't change the values of pNumber or pLength, you can pass them by value (ByVal in Visual Basic). And knowing that both pNumber and pLength are integers, and therefore always numeric, your method could be shortened to the following:

private string ZeroPad(int pNumber, int pLength)
{
    string zeroPad;
    string padding = new string('0', pLength);

    zeroPad = (padding + pNumber.ToString());

    zeroPad = zeroPad.Substring(zeroPad.Length - pLength);

    return zeroPad;
}

The .NET Framework's Base Class Libraries have a String.PadRight method that does exactly what you want if you specify '0' as the value for paddingChar.

OTHER TIPS

In C#, you don't assign to method name. Instead you use a "return" statement. Declare a variable:

string retVal;

And instead of

ZeroPad = some_value;

use:

retVal = some_value;

and at last return retVal:

return retVal;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top