2

これらの関数を呼び出して必要のないものを取り除こうとしていますが、無駄な闘いであると認識し始めていることで、コードが私を打ち負かしているようです。これらの最後の 2 つのエラーを解決するために複数の方法を試しましたが、IEnumerator からワイルド カードが返されます。エラーは行にあります: if (enumerator2 is IDisposable) and if (enumerator is IDisposable)

        try
        {
            enumerator = matchs.GetEnumerator();
            while (enumerator.MoveNext())
            {
                IEnumerator enumerator2;
                Match current = (Match) enumerator.Current;
                num = 0;
                try
                {
                    enumerator2 = current.Groups.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        Group group = (Group) enumerator2.Current;
                        strArray[num, num3] = group.Value;
                        num++;
                    }
                }
                finally
                {
                    if (enumerator2 is IDisposable)
                    {
                        (enumerator2 as IDisposable).Dispose();
                    }
                }
                if (num2 < num3)
                {
                    num2 = num3;
                }
                num3++;
            }
        }
        finally
        {
            if (enumerator is IDisposable)
            {
                (enumerator as IDisposable).Dispose();
            }
        }
        strArray[num, 0] = Conversions.ToString((int) (num2 + 1));
        return strArray;
    }

編集固有のエラー メッセージ: Use of unassigned local variable 'enumerator2'
Use of unassigned local variable 'enumerator'

4

2 に答える 2

5

while ループの代わりに for-each ループを使用します。必要に応じて Dispose が呼び出されます。

http://msdn.microsoft.com/en-us/library/aa288257(VS.71).aspx

于 2011-06-04T02:53:09.037 に答える
2

foreach他の人が指摘したように、ループを使用する必要があります。

しかし、そのエラーが発生する理由は、がブロックでenumerator2使用されている場合finally、コンパイラが何らかの値に設定されていることを認識できないためです (例外的な状況ではない可能性があるため)。次のようにして、コードをそのまま修正できます。

IEnumerator enumerator2 = null;
Match current = ...
于 2011-06-04T03:27:49.380 に答える