将String数组作为参数发送给函数

时间:2011-11-11 13:52:58

标签: c# design-patterns parameter-passing arrays

我在名为Function的类中有一个函数,如下所示:

public int SearchedRecords(String [] recs)
{
    int counter = 0;
    String pat = "-----";
    String[] records = recs;

    foreach (String line in records)
    {
        if (line.Contains(pat) == true)
        {
            counter++;
        }
    }

    return counter;
}

我用这种方式从我的主类中调用这个方法:

        String [] file = File.ReadAllLines("C:/Users.../results.txt");
        int counter = Function.SearchedRecords( []file);

但是我收到一个错误说:

  

;预期

有什么问题?


另一个问题:上面的函数是从文件中计算出所有具有模式-----的行(即使有更多破折号,或者如果行在破折号之前或之后有一些字符)。我是对的吗?

它类似于Java中的模式,所以也许还有另一种方式 你能开导我吗?

6 个答案:

答案 0 :(得分:4)

从参数中删除[]。

e.g。

int counter = Function.SearchedRecords(file);

是的,您对Contains方法行为的假设是正确的 - 您将匹配包含五个连续破折号的任何行,无论其前后是什么字符。

如果你想解析五个破折号,在它们之前或之后没有任何内容,我建议查看RegEx类(正则表达式)。

答案 1 :(得分:2)

更改

int counter = Function.SearchedRecords( []file);

int counter = Function.SearchedRecords(file);

是的,对于该字符串,这将有效。 但是Contains区分大小写,如果您在名称上匹配,或者使用字母字符匹配另一个字符串,则大小写必须与匹配,例如匹配。 line.Contains("Binary Worrier")与字符串“Hello binary worrier”不匹配。

此外,如果您知道文件将始终很小,则将整个文件读入内存即可,此方法文件越大效率越低。 最好始终使用System.IO.StreamReaderSystem.IO.File.ReadLines(在.Net 4及更高版本中可用),这些允许您一次使用一行文件。 e.g。

using (var reader = new System.IO.StreamReader("MyFile.txt"))
{
    while(!reader.EndOfStream)
    {
        string line = reader.ReadLine();
        if (line.Contains(pattern))
            counter++;
    }
}

答案 2 :(得分:1)

将其更改为

 int counter = Function.SearchedRecords(file);

答案 3 :(得分:1)

从方法调用中删除“[]”。是的,你的功能似乎算你想要的。

答案 4 :(得分:1)

首先,您需要创建一个函数类实例,然后运行该函数。希望以下代码有帮助

Function fb = new Function();
int counter = fb.SearchedRecords(file);

目前,您正在使用SearchRecords作为静态类的静态函数,不需要实例化。

答案 5 :(得分:1)

您可以使用LINQ以更短的方式执行此操作:

 int counter = file.Count(line => line.Contains("-----"));