4

DumpItと呼ばれる次のIEnumerable拡張メソッドをステップ実行しようとしています。デバッガーはそれをステップスルーしません。デバッガーにこの拡張メソッドにステップインさせるにはどうすればよいですか?

私のユニットテスト:

[Test]
        public void TestDumpIt()
        {
            var words =
                new string[] {"   KOOKABURRA", "Frogmouth", "kingfisher   ", "loon", "merganser"};

            var result = words
                .DumpIt(d => "original: " + d)
                .Select(word => word.Trim())
                .DumpIt(d => "trimmed: " + d)
                .Select(word => word.ToLower())
                .DumpIt(d => "lower cased: " + d)
                .Where(word => word.StartsWith("k"))
                .DumpIt(d => "starts with k: " + d)
                .OrderBy(word => word)
                .DumpIt(d => "orderd: " + d);
        }

拡張メソッド:

public static IEnumerable<T> DumpIt<T>(this IEnumerable<T> input,
    Func<T, string> toString
    )
{
    foreach (var item in input)
    {
        Output.ActivePane.Activate();
        Output.ActivePane.OutputString(
            ShowWhiteSpace ? '[' + toString(item) + ']' : toString(item));

        yield return item;
    }
}

助けてくれてありがとう!

4

1 に答える 1

10

を使用する場合yield、遅延実行を使用しています。使用している他のLINQメソッドも、遅延実行を使用します。resultでの列挙を開始するまで、DumpItメソッドは実際には呼び出されませんTestDumpIt。コードが呼び出されるのを確認したい場合は、列挙可能なものを列挙する必要があります。たとえばresult.ToList()、最後にaを追加して、列挙を強制することができます。

于 2012-10-30T13:48:49.140 に答える