Lambda成了一个方法

时间:2015-04-28 09:03:28

标签: c# lambda streamreader

我有一种方法可以阅读文本文件。 我必须在文本文件中获得以" ART"。

开头的单词

我有一个循环遍历该方法的foreach循环。

class ProductsList
{
public static void Main()
{
    String path = @"D:\ProductsProjects\products.txt";
    GetProducts(path,  s => s.StartsWith("ART"));
    //foreach (String productin GetProducts(path, s => s.StartsWith("ART"))) 
    //Console.Write("{0}; ", word);

}

我的方法如下:

public static String GetProducts(String path, Func<String, bool> lambda)
{
    try {
        using (StreamReader sr = new StreamReader(path)){
            string[] products= sr.ReadToEnd().Split(' ');
            // need to get all the products starting with ART
            foreach (string s in products){
                return s;
            }

        }
    }

     catch (IOException ioe){
        Console.WriteLine(ioe.Message);
        }
        return ="";
        }

    }

我在方法中遇到lambda的问题,我不熟悉lambda&s,而且我真的不知道如何在方法中应用lambda。 / p>

对不起,如果我不能那么好地解释自己。

2 个答案:

答案 0 :(得分:2)

只需将其添加到此处

foreach (string s in products.Where(lambda))

<强>更新

您应该像这样更改方法,以返回产品列表,而不仅仅是单个

public static IEnumerable<string> GetProducts(String path, Func<String, bool> lambda)
{
    using (StreamReader sr = new StreamReader(path))
    {
        string[] products = sr.ReadToEnd().Split(' ');
        // need to get all the products starting with ART
        foreach (string s in products.Where(lambda))
        {
            yield return s;
        }
    }
}

答案 1 :(得分:1)

你的代码是错误的,因为它只返回一个字符串,你想要返回多个字符串,如果产品列表很大,这也可能需要一段时间,我建议这样做:< / p>

public static IEnumerable<string> GetProducts(string path, Func<string, bool> matcher)
{
    using(var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
    {
        using(var reader = new StreamReader(stream))
        {
            do
            {
                var line = reader.ReadLine();
                if (matcher(line)) yield return line
            }while(!reader.EndOfFile)
        }
    }
}

然后使用它就像:

foreach(var product in GetProducts("abc.txt", s => s.StartsWith("ART")))
{
    Console.WriteLine("This is a matching product: {0}", product);
}

此代码的好处是返回与谓词(lambda)匹配的所有行,以及使用迭代器块执行此操作,这意味着它实际上不会读取下一行,直到您要求它