1

私の理解では、Redim は に似ていList<T>ます。この VB6 から C# への適切な変換を確実にするためのヘルプを使用できます。

Private Sub ParseString(sInput As String, sWords() As String, lCount As Long, sDel As String)      
    '   Parses a delimited input string (sInput) on a single
    '   delimiter and returns the parsed words back in a
    '   string array sWords().
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '
    ' INPUTS:
    '   sInput - string to be parsed.
    '   sDel   - Delimiter character.
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' OUTPUTS:
    '   sWords() - dynamic string array containing the parsed words.
    '
    '   lCount   - long, returning the number of words parsed
    '
    ' NOTES:
    '   If this subroutine is passed an empty string, it will
    '   return a lCount of 0 with one element in sWords().
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim lWordStart As Long
    Dim lWordEnd As Long
    Dim sTemp As String
    Dim lParsedArraySize As Long
    Dim lDelLen As Long
    '    Dim lStartM As Long
    '    Dim lEndM As Long
    Dim lLength As Long

    lDelLen = Len(sDel)
    lLength = Len(sInput)

    If sInput = "" Then
       ReDim sWords(1 To 1) As String
       lCount = 0
       sWords(1) = ""
       Exit Sub
    End If
    lParsedArraySize = 50
ReDim sWords(1 To lParsedArraySize) As String

    lWordStart = 1
    lCount = 1

    Do
        lWordEnd = InStr(lWordStart, sInput, sDel)
        If lWordEnd = 0 Then
            sTemp = Mid$(sInput, lWordStart)

            If lCount > lParsedArraySize Then
            ReDim Preserve sWords(1 To lCount) As String
            End If
            sWords(lCount) = sTemp
            Exit Do
        Else
            sTemp = Mid$(sInput, lWordStart, lWordEnd - lWordStart)
            'If sTemp <> "" Then
            If lCount > lParsedArraySize Then
                lParsedArraySize = lParsedArraySize + 50
                ReDim Preserve sWords(1 To lParsedArraySize) As String
            End If
            sWords(lCount) = sTemp
            lCount = lCount + 1
            'End If
            lWordStart = lWordEnd + lDelLen
        End If
    Loop

    If lCount < lParsedArraySize Then
    ReDim Preserve sWords(1 To lCount) As String
    End If

この If ステートメントを C# に変換するにはどうすればよいですか? これまでのところ...

private void ParseString(string sInput, List<string> sWords, int lCount, string sDel)
{
    int lWordStart;
    int lWordEnd;
    string sTemp;
    int lParsedArraySize;
    int lDelLen;
    //int lStartM;
    //int lEndM;
    int lLength;

    lDelLen = sDel.Length;

     lLength = sInput.Length;

    if(String.IsNullOrEmpty(sInput))
    {

    }
}
4

2 に答える 2

2

関数呼び出しが配列を変更しているようです。その場合、次のことを行う必要があります。

編集:追加の詳細を提供したので、2つの出力が必要だと思います。

private void ParseString(string sInput, out List<string> sWords, out int lCount, string sDel)
{
    int lWordStart;
    int lWordEnd;
    string sTemp;
    int lParsedArraySize;
    int lDelLen;
    int lLength;

    lDelLen = sDel.Length;

    lLength = sInput.Length;

    // We are required to set all the output values in this function call    
    sWords = new List<string>();
    lCount = 0;

    if (String.IsNullOrEmpty(sInput)) {
        sWords.Add(""); // Now, sWords[0] will equal "" - this may not be exactly what
        // your VB code expects, but since all C# arrays begin with zero it's the
        // closest approximation.  Alternatively, you could add two items so that
        // sWords[1] would still return the correct value.
        return;
    }
    lParsedArraySize = 50;

    // I'm assuming there's more code down here that does more work ;)
}
于 2012-08-09T20:01:41.353 に答える
0

ReDimと同じではありませんListReDim配列のサイズを変更できます。これにより、を使用して、配列を持つリストの可変サイズの動作をエミュレートReDimできます。

ロジックが入力が空かどうかをテストし、その値を最初の出力要素に割り当てているようです。また、最初にリスト(配列)をクリアしているようです。これを行う1つの方法は次のとおりです。

if (sWords == null) {
  sWords = new List<string>(); // Ensure the list is not null
}
else {
  sWords.Clear()      // Clear the list if it was provided
} 

// Add an empty string to the list if the input was empty.
if (String.IsNullOrEmpty(sInput)) {
  sWords.Add(String.Empty);
  return;
}
于 2012-08-09T20:11:02.780 に答える