Pergunta

Como o VB.NET calcula o comprimento de um método?Como posso fazer isso em C#?

Este meu VB.NET código:

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

Converti para C# da seguinte maneira:

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();
    }
}
Foi útil?

Solução

Você provavelmente está confuso entre a variável ZeroPad e o método ZeroPad.É comum escrever nomes de variáveis ​​com um caractere inicial minúsculo, por ex. zeroPad.Para retornar um valor de um método, use return em C#.Não tenho certeza de qual é o propósito do seu IsNumeric sub-rotina ou por que você toma valor por referência, mas seu código em C# seria semelhante a:

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;
}

Como você não altera os valores de pNumber ou pLength, você pode passá-los por valor (ByVal em Visual Basic).E sabendo que ambos pNumber e pLength são inteiros e, portanto, sempre numéricos, seu método pode ser abreviado para o seguinte:

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;
}

As bibliotecas de classes base do .NET Framework têm um String.PadRight método que faz exatamente o que você deseja se você especificar '0' como o valor para paddingChar.

Outras dicas

Em C#, você não atribui ao nome do método.Em vez disso, você usa uma instrução "return".Declare uma variável:

string retVal;

E em vez de

ZeroPad = some_value;

usar:

retVal = some_value;

e finalmente retorne retVal:

return retVal;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top